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

資訊專欄INFORMATION COLUMN

初探Kotlin+SpringBoot聯(lián)合編程

xiaokai / 2358人閱讀

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

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

本文主要介紹一下如何使用Kotlin結(jié)合SpringBt開發(fā)一個帶有數(shù)據(jù)庫交互的REST風(fēng)格基本程序

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

實(shí)驗(yàn)環(huán)境

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

數(shù)據(jù)庫:MySQL

數(shù)據(jù)庫訪問組件:Spring data jpa

J2EE框架:SpringBt 1.5.2.RELEASE

構(gòu)建工具:Gradle

工程創(chuàng)建

沒啥好說的,我這里創(chuàng)建的是基于Gradle的Kotlin工程:

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

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

完善build.gradle配置

我們需要在build.gradle中引入SpringBt依賴,除此之外還要引入一些特定的插件方便我們向?qū)慗ava代碼一樣來寫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相關(guān)的依賴就配置上了!

接下來我們配置兩個非常關(guān)鍵的插件依賴:

無參(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的默認(rèn)無參構(gòu)造函數(shù),默認(rèn)把所有的類設(shè)置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)編譯器插件,它為具有特定注解的類生成一個額外的零參數(shù)構(gòu)造函數(shù)。 這個生成的構(gòu)造函數(shù)是合成的,因此不能從 Java 或 Kotlin 中直接調(diào)用,但可以使用反射調(diào)用。 這樣我們就可以使用 Java Persistence API(JPA)實(shí)例化 data 類。

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

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

配置application.properties

這里面主要是跟Mysql數(shù)據(jù)庫相關(guān)的一些配置:

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

我們需要去數(shù)據(jù)庫中查詢東西,所以二話不說,寫個訪問數(shù)據(jù)庫的標(biāo)準(zhǔn)代碼層:

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的代碼基本沒區(qū)別了

實(shí)際實(shí)驗(yàn)

首先需要去Mysql中建好數(shù)據(jù)庫,并插入一些數(shù)據(jù):

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

可以看到數(shù)據(jù)成功被取回:

參考文獻(xiàn)

《Kotlin極簡教程》

后記

作者更多的原創(chuàng)文章在此,歡迎觀賞

My Personal Blog

作者更多的SpringBt實(shí)踐文章在此:

Spring Boot應(yīng)用監(jiān)控實(shí)戰(zhàn)

SpringBoot應(yīng)用部署于外置Tomcat容器

ElasticSearch搜索引擎在SpringBt中的實(shí)踐

初探Kotlin+SpringBoot聯(lián)合編程

Spring Boot日志框架實(shí)踐

SpringBoot優(yōu)雅編碼之:Lombok加持

如果有興趣,也可以抽點(diǎn)時間看看作者一些關(guān)于容器化、微服務(wù)化方面的文章:

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

從一份配置清單詳解Nginx服務(wù)器配置

Docker容器可視化監(jiān)控中心搭建

利用ELK搭建Docker容器化應(yīng)用日志中心

RPC框架實(shí)踐之:Apache Thrift

RPC框架實(shí)踐之:Google gRPC

微服務(wù)調(diào)用鏈追蹤中心搭建

Docker容器跨主機(jī)通信

Docker Swarm集群初探

高效編寫Dockerfile的幾條準(zhǔn)則

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/68333.html

相關(guān)文章

  • SpringBoot熱部署加持

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

    ixlei 評論0 收藏0
  • SpringBoot應(yīng)用部署于外置Tomcat容器

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

    draveness 評論0 收藏0
  • SpringBoot應(yīng)用Docker化

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

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

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

    周國輝 評論0 收藏0

發(fā)表評論

0條評論

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