国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

初探Kotlin+SpringBoot聯合編程

xiaokai / 2352人閱讀

摘要:是一門最近比較流行的靜態類型編程語言,而且和一樣同屬系。這個生成的構造函數是合成的,因此不能從或中直接調用,但可以使用反射調用。

Kotlin是一門最近比較流行的靜態類型編程語言,而且和Groovy、Scala一樣同屬Java系。Kotlin具有的很多靜態語言特性諸如:類型判斷、多范式、擴展函數、模式匹配等等讓我無法只作為一個吃瓜群眾了,所以稍微花了點時間了解了一下該語言。

本文主要介紹一下如何使用Kotlin結合SpringBt開發一個帶有數據庫交互的REST風格基本程序

注: 本文首發于 My 公眾號 CodeSheep ,可 長按掃描 下面的 小心心 來訂閱 ↓ ↓ ↓

實驗環境

JDK不用說了,Kotlin畢竟是運行在JVM環境下的語言,所以JDK必須,我這里用的JDK1.8

數據庫:MySQL

數據庫訪問組件:Spring data jpa

J2EE框架:SpringBt 1.5.2.RELEASE

構建工具:Gradle

工程創建

沒啥好說的,我這里創建的是基于Gradle的Kotlin工程:

創建完成后的基本工程樣式和SpringBt的工程幾乎沒任何區別,給張圖示意一下好了:

好啦,接下來我們就來寫代碼完善這個工程即可

完善build.gradle配置

我們需要在build.gradle中引入SpringBt依賴,除此之外還要引入一些特定的插件方便我們向寫Java代碼一樣來寫Kotlin程序!

在dependencies中加入如下依賴:

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")
}

這樣SpringBt相關的依賴就配置上了!

接下來我們配置兩個非常關鍵的插件依賴:

無參(no-arg)插件

全開放(allopen)插件

我們先配上,等下解釋:

buildscript {
    ext.kotlin_version = "1.1.1"
    ext.springboot_version = "1.5.2.RELEASE"

    repositories {
        mavenCentral()
    }
    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整合SpringBoot的默認無參構造函數,默認把所有的類設置open類插件
        classpath("org.jetbrains.kotlin:kotlin-noarg:$kotlin_version") // 無參插件
        classpath("org.jetbrains.kotlin:kotlin-allopen:$kotlin_version") // 全開放插件
    }
}

其中(以下解釋源自《Kotlin極簡教程》):

org.jetbrains.kotlin:kotlin-noarg是無參(no-arg)編譯器插件,它為具有特定注解的類生成一個額外的零參數構造函數。 這個生成的構造函數是合成的,因此不能從 Java 或 Kotlin 中直接調用,但可以使用反射調用。 這樣我們就可以使用 Java Persistence API(JPA)實例化 data 類。

org.jetbrains.kotlin:kotlin-allopen 是全開放編譯器插件。我們使用Kotlin 調用Java的Spring AOP框架和庫,需要類為 open(可被繼承實現),而Kotlin 類和函數都是默認 final 的,這樣我們需要為每個類和函數前面加上open修飾符。這樣的代碼寫起來很費事。還好,我們有all-open 編譯器插件。它會適配 Kotlin 以滿足這些框架的需求,并使用指定的注解標注類而其成員無需顯式使用 open 關鍵字打開。 例如,當我們使用 Spring 時,就不需要打開所有的類,跟我們在Java中寫代碼一樣,只需要用相應的注解標注即可,如 @Configuration 或 @Service。

講白了,引入這兩個特定的插件的目的就是為了方便我們向寫SpringBt代碼一樣來寫Kotlin程序!

配置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
正式編寫工程

我們需要去數據庫中查詢東西,所以二話不說,寫個訪問數據庫的標準代碼層:

controller

entity

repository

service

各部分代碼如下:

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 "People(id=$id, firstName="$firstName", lastName="$lastName", gender="$gender", age=$age, gmtCreated=$gmtCreated, gmtModified=$gmtModified)"
    }
}

PeopleRepository.kt

interface PeopleRepository : CrudRepository {
    fun findByLastName(lastName: String): List?
}

PeopleService.kt

@Service
class PeopleService : PeopleRepository {

    @Autowired
    val peopleRepository: PeopleRepository? = null

    override fun findByLastName(lastName: String): List? {
        return peopleRepository?.findByLastName(lastName)
    }

    override fun  save(entity: S): S? {
        return peopleRepository?.save(entity)
    }

    override fun  save(entities: MutableIterable?): MutableIterable? {
        return peopleRepository?.save(entities)
    }

    override fun delete(entities: MutableIterable?) {
    }

    override fun delete(entity: People?) {
    }

    override fun delete(id: Long?) {
    }

    override fun findAll(ids: MutableIterable?): MutableIterable? {
        return peopleRepository?.findAll(ids)
    }

    override fun findAll(): MutableIterable? {
        return peopleRepository?.findAll()
    }

    override fun exists(id: Long?): Boolean {
        return peopleRepository?.exists(id)!!
    }

    override fun count(): Long {
        return peopleRepository?.count()!!
    }

    override fun findOne(id: Long?): People? {
        return peopleRepository?.findOne(id)
    }

    override fun deleteAll() {
    }
}

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()
        map.put("hello", peoples!!)
        return map
    }
}

可見有了無參、全開放組件加持后,寫代碼和寫Java的代碼基本沒區別了

實際實驗

首先需要去Mysql中建好數據庫,并插入一些數據:

然后啟動工程,訪問:
http://localhost:7000/hello?lastName=wang

可以看到數據成功被取回:

參考文獻

《Kotlin極簡教程》

后記

作者更多的原創文章在此,歡迎觀賞

My Personal Blog

作者更多的SpringBt實踐文章在此:

Spring Boot應用監控實戰

SpringBoot應用部署于外置Tomcat容器

ElasticSearch搜索引擎在SpringBt中的實踐

初探Kotlin+SpringBoot聯合編程

Spring Boot日志框架實踐

SpringBoot優雅編碼之:Lombok加持

如果有興趣,也可以抽點時間看看作者一些關于容器化、微服務化方面的文章:

利用K8S技術棧打造個人私有云 連載文章

從一份配置清單詳解Nginx服務器配置

Docker容器可視化監控中心搭建

利用ELK搭建Docker容器化應用日志中心

RPC框架實踐之:Apache Thrift

RPC框架實踐之:Google gRPC

微服務調用鏈追蹤中心搭建

Docker容器跨主機通信

Docker Swarm集群初探

高效編寫Dockerfile的幾條準則

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/68333.html

相關文章

  • SpringBoot熱部署加持

    摘要:概述進行的開發過程中,我們很多時候經常需要重啟服務器才能保證修改的源代碼文件或者一些諸如的配置文件以及一些靜態文件生效,這樣耗時又低效。 showImg(https://segmentfault.com/img/remote/1460000015363888); 概述 進行SpringBoot的Web開發過程中,我們很多時候經常需要重啟Web服務器才能保證修改的 源代碼文件、或者一些...

    ixlei 評論0 收藏0
  • SpringBoot應用部署于外置Tomcat容器

    摘要:但考慮到實際的情形中,我們的服務器一般是另外部署好了的,有專門的維護方式。此時我們需要剝離掉應用內置的服務器,進而將應用發布并部署到外置的容器之中,本文就實踐一下這個。 showImg(https://segmentfault.com/img/remote/1460000015173574); 0x01. 概述 SpringBoot平時我們用的爽歪歪,爽到它自己連Tomcat都自集成...

    draveness 評論0 收藏0
  • SpringBoot應用Docker化

    摘要:微服務的基本思想在于考慮圍繞著業務領域組件來創建應用,這些應用可獨立地進行開發管理和加速。在分散的組件中使用微服務云架構和平臺,使部署管理和服務功能交付變得更加簡單。 showImg(https://segmentfault.com/img/remote/1460000014332184); 概述 當下web服務端開發中最火的名詞中絕對有微服務的一席之地,其也成為當下互聯網后端服務架...

    U2FsdGVkX1x 評論0 收藏0
  • 利用ELK搭建Docker容器化應用日志中心

    摘要:概述應用一旦容器化以后,需要考慮的就是如何采集位于容器中的應用程序的打印日志供運維分析。 showImg(https://segmentfault.com/img/remote/1460000014146680); 概述 應用一旦容器化以后,需要考慮的就是如何采集位于Docker容器中的應用程序的打印日志供運維分析。典型的比如 SpringBoot應用的日志 收集。本文即將闡述如何利...

    周國輝 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<