據說Kotlin是一門有可能在未來幹掉Java的語言?嗯?這麼強嗎?
我得趕緊來試試!!!
前 言
Kotlin是一門最近非常流行的程式設計語言,而且和Groovy語言、Scala語言一樣同屬Java派系語言。Kotlin具有的很多靜态語言特性諸如:類型判斷、多範式、擴充函數、模式比對等等讓我無法隻作為一個吃瓜群衆了,是以稍微花了點時間了解了一下該語言,并想着用Kotlin來寫個什麼小Demo,這不就有了這篇文章嘛。
本文主要實踐一下如何使用Kotlin結合Spring Boot來開發一個帶有資料庫互動的REST風格的基本Web程式。
實驗環境
- JDK不用說了,Kotlin畢竟是運作在JVM環境下的語言,是以JDK必須,我這裡用的JDK 1.8
- 資料庫:MySQL
- 資料庫通路元件:Spring Data Jpa
- JavaEE架構:Spring Boot
- 項目管理工具:Gradle
工程建立+目錄結構
沒啥好說的,我這裡建立的是基于Gradle的Kotlin工程:
建立完成後的基本工程目錄結構和普通Spring Boot的工程幾乎沒任何差別,給張圖示意一下好了:
好啦,接下來我們就來寫代碼完善這個工程即可
添加Gradle依賴
首先,我們需要在
build.gradle
中引入Kotlin、Spring Boot、MySQL、JPA等元件的依賴:
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version"
testCompile group: 'junit', name: 'junit', version: '4.12'
compile("org.springframework.boot:spring-boot-starter-web")
testCompile("org.springframework.boot:spring-boot-starter-test")
compile("org.springframework.boot:spring-boot-starter-data-jpa")
compile('mysql:mysql-connector-java:5.1.13')
}
除此之外,我們還需要引入一些特定的插件來友善我們寫Kotlin代碼
這裡我們配置兩個非常關鍵的插件依賴:
- 無參(
)插件no-arg
- 全開放(
allopen
-
buildscript {
-
......
-
dependencies {
-
// Kotlin Gradle插件
-
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
-
// SpringBoot Gradle插件
-
classpath("org.springframework.boot:spring-boot-gradle-plugin:$springboot_version")
-
// Kotlin整合Spring Boot的預設無參構造函數,預設把所有的類設定open類插件
-
classpath("org.jetbrains.kotlin:kotlin-noarg:$kotlin_version") // 無參插件
-
classpath("org.jetbrains.kotlin:kotlin-allopen:$kotlin_version") // 全開放插件
-
}
-
......
-
}
完善配置檔案
接下來配置application.properties檔案,這裡面主要是跟MySQL資料庫相關的一些配置:
-
spring.datasource.url = jdbc:mysql://localhost:3306/easykotlin
-
spring.datasource.username = root
-
spring.datasource.password = 你的MySQL密碼
-
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
-
spring.jpa.database = MYSQL
-
spring.datasource.testWhileIdle = true
-
spring.datasource.validationQuery = SELECT 1
-
spring.jpa.show-sql = true
-
spring.jpa.hibernate.ddl-auto = update
-
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
-
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
-
server.port=7000
正式寫Kotlin代碼
因為我們需要去資料庫中查詢東西,是以二話不說,寫個通路資料庫的标準代碼目錄結構:
- controller
- entity
- repository
- service
各部分代碼如下:(注意!以下業務代碼都是用Kotlin寫的!檔案字尾為.kt)
實體類:People.kt
@Entity
class People(
@Id @GeneratedValue(strategy = GenerationType.AUTO)
val id: Long?,
val firstName: String?,
val lastName: String?,
val gender: String?,
val age: Int?,
val gmtCreated: Date,
val gmtModified: Date
) {
override fun toString(): String {
return "firstName='$firstName', lastName='$lastName'"
}
}
資料庫操作類:PeopleRepository.kt
interface PeopleRepository : CrudRepository<People, Long> {
fun findByLastName(lastName: String): List<People>?
}
Service層代碼:PeopleService.kt
-
@Service
-
class PeopleService : PeopleRepository {
-
@Autowired
-
val peopleRepository: PeopleRepository? = null
-
override fun findByLastName(lastName: String): List<People>? {
-
return peopleRepository?.findByLastName(lastName)
-
}
-
}
Controller層代碼:PeopleController.kt
-
@Controller
-
class PeopleController {
-
@Autowired
-
val peopleService: PeopleService? = null
-
@GetMapping(value = "/hello")
-
@ResponseBody
-
fun hello(@RequestParam(value = "lastName") lastName: String): Any {
-
val peoples = peopleService?.findByLastName(lastName)
-
val map = HashMap<Any, Any>()
-
map.put("hello", peoples!!)
-
return map
-
}
-
}
看到沒,Kotlin代碼非常簡潔!而且如果有Java語言的基礎,你會發現基本不需要深入學習,就可以快速上手Kotlin語言,不需什麼學習成本!
接口測試
首先需要去MySQL中建好資料庫,并插入一些資料:
然後啟動工程,通路:http://localhost:7000/hello?lastName=wang
可以看到資料被成功取回:
可以可以,Kotlin真香!
我正在考慮以後寫Java項目是不是都換成Kotlin來寫了 . . . 也太友善了!
後 記
若有錯誤或者不當之處,可在本公衆号内回報,一起學習交流!
更多熱文在此:
● Spring Boot 系列實戰文章合集(源碼已開源)
● 程式員寫履歷時必須注意的技術詞彙拼寫
● 前後端都分離了,該搞個好用的API管理系統了!
● 從一份配置清單詳解Nginx伺服器配置
● 如何在Windows下像Mac一樣優雅的開發
● Docker容器可視化監控中心搭建
● 利用ELK搭建Docker容器化應用日志中心
● 真實IT領域2/8法則,紮心了!
● 一文詳解 Linux系統常用監控工具