Gradle+Kotlin в сочетании с Spring Boot+Mybatis+SQLite для быстрой разработки облегченных серверных приложений

Spring Boot MyBatis SQLite gradle Kotlin

Я много думал о заголовке и чувствую, что подходят многие заголовки, например:

«Станет ли Kotlin + Spring Boot новой опцией? 》

«Архитектура разработки серверов для инженеров Android»

«Создайте облегченную структуру сервера Java без развертывания Tomcat или Mysql»

предисловие

Я всегда использовал Maven+Java+Tomcat+Springmvc+Mybatis+Mysql для создания небольших серверных приложений.Этот фреймворк очень прост и удобен в использовании.Недавно я задался вопросом, будет ли лучшее решение, плюс я недавно изучил язык Kotlin для разрабатывать Android, поэтому у меня есть эта статья.

Введение в структуру

Архитектура использует Gradle+Kotlin+Spring Boot+Mybatis+SQLite для замены Maven+Java+Tomcat+Springmvc+Mybatis+Mysql, где Gradle заменяет Maven, Kotlin заменяет Java, Spring Boot заменяет Tomcat, а Spring Boot также предлагает вместо него Springmvc, SQLite. из Mysql.

Kotlin

Kotlin — это статический язык программирования для современных мультиплатформенных приложений, разработанный JetBrains. Его можно скомпилировать в байт-код Java или в JavaScript, что удобно для запуска на устройствах без JVM. Kotlin официально стал официально поддерживаемым языком разработки для Android.

Gradle

Gradle — это инструмент для автоматизации сборки проектов, основанный на концепциях Apache Ant и Apache Maven. Он использует доменный язык (DSL) на основе Groovy для объявления настроек проекта, отказываясь от громоздкой конфигурации на основе XML. На основе Groovy сценарии сборки пишутся на Groovy.

Spring Boot

Spring Boot — это новый фреймворк, предоставленный командой Pivotal и предназначенный для упрощения первоначальной настройки и разработки новых приложений Spring. Таким образом, Spring Boot стремится стать лидером в быстро развивающейся области быстрой разработки приложений.

  1. Создайте отдельное приложение Spring
  2. Встроенный Tomcat без развертывания файлов WAR
  3. Упрощенная конфигурация Maven
  4. Автоматически настроить Spring
  5. Предоставляет готовые к работе функции, такие как метрики, проверки работоспособности и внешняя конфигурация.
  6. Абсолютно не требуется генерация кода и настройка для XML.
Mybatis

MyBatis — это превосходная структура уровня сохраняемости, которая поддерживает пользовательский SQL, хранимые процедуры и расширенное сопоставление. MyBatis избегает почти всего кода JDBC и ручной настройки параметров и выборки наборов результатов.

SQLite

SQLite, облегченная база данных, представляет собой ACID-совместимую систему управления реляционными базами данных. В отличие от общей парадигмы клиент-сервер, механизм SQLite не является отдельным процессом, с которым взаимодействует программа. Вся база данных (определения, таблицы, индексы и сами данные) хранится в одном файле на хосте.

  1. КИСЛОТНЫЕ транзакции
  2. Нулевая конфигурация — нет необходимости устанавливать и управлять конфигурацией
  3. Полная база данных, хранящаяся в одном файле на диске
  4. Файлы базы данных могут свободно использоваться между машинами с разным порядком байтов.
  5. Поддержка размера базы данных до 2 ТБ
  6. Достаточно маленький, примерно 130 тыс. строк кода C, 4,43 млн.
  7. Быстрее, чем некоторые популярные базы данных в наиболее распространенных операциях с базами данных
  8. Простой и удобный API

Структура проекта и среда приложения

Используя IntelliJ IDEA для разработки и запуска, файловая структура проекта выглядит следующим образом:


├── build.gradle
├── gradle
├── mydatabase.sqlite
├── settings.gradle
└── src
    ├── main
    │   ├── java
    │   ├── kotlin
    │   │   └── com
    │   │       └── thejoyrun
    │   │           └── webtest
    │   │               ├── MyApplication.kt
    │   │               ├── controller
    │   │               │   ├── TestApiController.kt
    │   │               │   └── TestController.kt
    │   │               ├── dao
    │   │               │   └── UserRepository.kt
    │   │               └── model
    │   │                   └── User.kt
    │   ├── resources
    │   │   ├── application.properties
    │   │   └── example.db
    │   └── webapp
    │       └── index.jsp
    └── test
        ├── java
        ├── kotlin
        └── resources

Проект не нужно запускать на Tomcat, MyApplication.kt проекта имеет запись основной функции, просто щелкните правой кнопкой мыши MyApplication.kt, выберитеrun 'com.thejoyrun.webtest.MyApplicationKt'Просто запустите его.

image.png

Процесс создания проекта с IntelliJ IDEA

Создайте веб-проект Kotlin

Процесс 1


image.png

Процесс 2


image.png

Процесс 3


image.png
Настройте файл build.gradle

Увеличьте зависимости Spring Boot, Mybatis, SQLite, JSP

group 'com.thejoyrun'
version '1.0-SNAPSHOT'
buildscript {
    ext.kotlin_version = '1.1.2'
    ext.springBootVersion = '2.0.1.RELEASE'
    repositories {
        mavenCentral()
    }
    dependencies {
        // Kotlin
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        // Spring-boot
        classpath "org.springframework.boot:spring-boot-gradle-plugin:$springBootVersion"
    }
}
apply plugin: 'java'
apply plugin: 'kotlin'
apply plugin: 'war'
sourceCompatibility = 1.8
repositories {
    mavenCentral()
}
dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.11'
    testCompile group: 'junit', name: 'junit', version: '4.12'
    // Kotlin
    compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version"
    compile("org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version")
    compile("org.jetbrains.kotlin:kotlin-reflect:$kotlin_version")
    // Spring-boot
    compile("org.springframework.boot:spring-boot-starter-web:$springBootVersion")
    // SQLite
    compile 'org.xerial:sqlite-jdbc:3.21.0.1'
    // Mybatis
    compile 'org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.2'
    // 支持jsp
    compile 'org.apache.tomcat.embed:tomcat-embed-jasper:9.0.7'
    // jsp的jstl表达式
    compile 'javax.servlet:jstl:1.2'
}
Создать файл базы данных SQLite

В проекте используется SQLite, поэтому необходим файл SQLite.Вы можете скачать официальный SQLiteManager, чтобы создать файл и создать таблицу данных. Или используйте следующий код, чтобы сгенерировать файл базы данных и создать таблицу данных напрямую.

fun main(args: Array<String>) {
    //连接SQLite的JDBC
    Class.forName("org.sqlite.JDBC")
    //建立一个数据库名example.db的连接,如果不存在就在当前目录下创建之
    val conn = DriverManager.getConnection("jdbc:sqlite:src/main/resources/example.db")
    val stat = conn.createStatement()
    // //创建一个表,包含id、name两个字段
    stat.executeUpdate("create table user(id int,name varchar(20));")
    // 插入一行数据
    stat.executeUpdate("insert into user values(1,'Wiki1');")
    stat.executeUpdate("insert into user values(2,'Wiki2');")
    //查询所有数据
    val rs = stat.executeQuery("select * from user;")
    while (rs.next()) { //将查询到的数据打印出来
        print("id = " + rs.getString("id") + " ")
        println("name = " + rs.getString("name"))
    }
    rs.close()
    conn.close()
}
Настроить источник данных

Создайте файл /src/main/resources/application.properties

spring.datasource.url=jdbc:sqlite::resource:example.db
#spring.datasource.url=jdbc:sqlite:/Users/Wiki/Documents/mydatabase.sqlite
spring.datasource.username=
spring.datasource.password=
spring.datasource.driver-class-name=org.sqlite.JDBC
Создать класс пользователя
class User {
    var id: Int = 0
    var name:String? = null
}
Создать класс дао
@Repository
interface UserRepository {

    @Select("SELECT * FROM User WHERE ID = #{id}")
    fun findById(@Param("id") integer: Int?): User

    @Select("SELECT * FROM User")
    fun findAll(): List<User>

    @Insert("INSERT INTO User(id,name) VALUES(#{id}, #{name})")
    @Options(useGeneratedKeys = true, keyProperty = "id")
    fun insert(user: User)
}
Создайте класс контроллера

http://localhost:8080/hello

@RestController
class TestApiController {
    @Autowired
    internal var userRepository: UserRepository? = null

    @GetMapping("/hello")
    fun hello(): Any {
        val users = userRepository!!.findAll()
        return users
    }
}

http://localhost:8080/test

@Controller
class TestController {
    @Autowired
    lateinit var userRepository: UserRepository

    @RequestMapping("/test")
    fun index(request: HttpServletRequest): String {
        val users = userRepository.findAll()
        request.setAttribute("users",users)
        return "/index.jsp"
    }
}

Создать index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<table border="2">
    <tr>
        <th>名称</th>
        <th>版本</th>
    </tr>
    <c:forEach items="${users}" var="item" varStatus="status">
        <tr>
            <td>${item.id}</td>
            <td>${item.name}</td>
        </tr>
    </c:forEach>
</table>
</body>
</html>
Создать запись приложения MyApplication

@MapperScan используется для настройки dao для сканирования под именем пакета.

@MapperScan("com.thejoyrun.webtest.dao")
@SpringBootApplication
open class MyApplication {}

fun main(args: Array<String>) {
    SpringApplication.run(MyApplication::class.java, *args)
}

Щелкните правой кнопкой мыши класс, чтобы запустить проект, и браузер получит доступ:

http://localhost:8080/hello

http://localhost:8080/test

Демонстрационный код

GitHub.com/setcrisis/gr…