創建基於kotlin開發環境的spring項目入門


kotlin是idea所屬公司開發的一門jvm語言,如果你不了解估計也不會看這里,所以我就不多說了。

這里簡單說一下如何新建一個小的kotlin spring項目。kotlin和idea是一家公司,所以Idea天然是支持kotlin語言的,現在spring也完全支持了kotlin。

新建項目,類型是spring
https://images.cnblogs.com/cnblogs_com/somefuture/1863121/o_210226013327si.png

在下一步選擇kotlin語言
https://images.cnblogs.com/cnblogs_com/somefuture/1863121/o_210226013334np.png

后面選擇需要依賴的spirng組件。我們是來玩的,選個web+jpa就夠了。


搭建好以后結構和Java maven一樣,源碼也是src/main/kotlin。里面有一個kt文件,就是kotlin的源文件。

為啥是一個顯示后綴名kt的文件呢?如果你自己創建kotlin類或接口,后綴kt在idea中是不顯示的,圖標也不一樣。這里是kotlin特色,這個文件里除了定義了一個被SpringBootApplication標注的類以外還有main函數,所以不是類文件。

現在已經可以運行main函數了,啟動過程和Java工程一樣。


正常對於kotlin來講,類要被代理,必須是open的(open class才能被繼承,否則默認是final的。你可以給主類加上final看一下,spring會報錯)。這里沒有加open關鍵字是因為我們使用了kotlin-maven-plugin插件。你可以在pom.xml中找一下。

接下來我們提供一個mvc端口,定義controller:

@RestController
class MessageResource() {
    @GetMapping("a", "b")
    fun index(): String = "hello world!"
}

方法的返回類型可以不寫。再啟動程序,訪問http://localhost:8080/a,瀏覽器上就是hello world!


現在我們加上數據庫的訪問。定義一個data class(和Java新的Record類似,相等於lombok的@Data,會自動包含getter/setter等方法):

@Table("messages")
data class Message(@Id val id: String?, val text: String)

這個類有兩個屬性,定義在后面的括號里。第一個的類型后面還有問號,說明可以為空。按照這個格式去創建一個表:

CREATE TABLE  messages (
  id                     varchar(60) not null  DEFAULT '' PRIMARY KEY,
  text                   VARCHAR(60)      NOT NULL
);
INSERT INTO messages VALUES ('1', 'text'),('2', 'ttt');

pom中增加mysql依賴,比如

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.49</version>
        </dependency>

application.properties中增加數據源:

spring.datasource.driverClassName =com.mysql.jdbc.Driver
spring.datasource.url = jdbc:mysql://127.0.0.1:3306/jfinal?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&useSSL=false
spring.datasource.username = root
spring.datasource.password = 123456

增加jpa repo:

interface MessageRepository : CrudRepository<Message, String> {

    @Query("select * from messages")
    fun findMessage(): List<Message>
}

@Service
class MessageService(val db: MessageRepository) {
    fun findMessages(): List<Message> = db.findMessage()

    fun post(message: Message) {
        db.save(message)
    }
}

改造controller:

@RestController
class MessageResource(val service: MessageService) {
    @GetMapping("a", "b")
    fun index(): List<Message> = service.findMessages()

    @PostMapping
    fun post(@RequestBody message: Message) {
        service.post(message)
    }
}

現在你可以測試一下這兩個接口了。

注意jpa的save方法是對象沒有Id就新增,有id就更新


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM