Я много думал о заголовке и чувствую, что подходят многие заголовки, например:
«Станет ли 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 стремится стать лидером в быстро развивающейся области быстрой разработки приложений.
- Создайте отдельное приложение Spring
- Встроенный Tomcat без развертывания файлов WAR
- Упрощенная конфигурация Maven
- Автоматически настроить Spring
- Предоставляет готовые к работе функции, такие как метрики, проверки работоспособности и внешняя конфигурация.
- Абсолютно не требуется генерация кода и настройка для XML.
Mybatis
MyBatis — это превосходная структура уровня сохраняемости, которая поддерживает пользовательский SQL, хранимые процедуры и расширенное сопоставление. MyBatis избегает почти всего кода JDBC и ручной настройки параметров и выборки наборов результатов.
SQLite
SQLite, облегченная база данных, представляет собой ACID-совместимую систему управления реляционными базами данных. В отличие от общей парадигмы клиент-сервер, механизм SQLite не является отдельным процессом, с которым взаимодействует программа. Вся база данных (определения, таблицы, индексы и сами данные) хранится в одном файле на хосте.
- КИСЛОТНЫЕ транзакции
- Нулевая конфигурация — нет необходимости устанавливать и управлять конфигурацией
- Полная база данных, хранящаяся в одном файле на диске
- Файлы базы данных могут свободно использоваться между машинами с разным порядком байтов.
- Поддержка размера базы данных до 2 ТБ
- Достаточно маленький, примерно 130 тыс. строк кода C, 4,43 млн.
- Быстрее, чем некоторые популярные базы данных в наиболее распространенных операциях с базами данных
- Простой и удобный 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'
Просто запустите его.
Процесс создания проекта с 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)
}
Создайте класс контроллера
@RestController
class TestApiController {
@Autowired
internal var userRepository: UserRepository? = null
@GetMapping("/hello")
fun hello(): Any {
val users = userRepository!!.findAll()
return users
}
}
@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)
}
Щелкните правой кнопкой мыши класс, чтобы запустить проект, и браузер получит доступ: