摘要:一本節(jié)目標(biāo)前兩章主要講了的基本操作,這一章我們將學(xué)習(xí)使用訪問,并通過完成簡單操作。這里有一個問題什么不選用數(shù)據(jù)庫呢答案是目前支持。突出點是,即非阻塞的。二構(gòu)建項目及配置本章不在講解如何構(gòu)建項目了,大家可以參考第一章。
一、本節(jié)目標(biāo)
前兩章主要講了SpringBoot Kotlin的基本操作,這一章我們將學(xué)習(xí)使用Kotlin訪問MongoDB,并通過JPA完成(Create,Read,Update,Delete)簡單操作。這里有一個問題什么不選用MySQL數(shù)據(jù)庫呢?
答案是 Spring Data Reactive Repositories 目前支持 Mongo、Cassandra、Redis、Couchbase。不支持 MySQL,那究竟為啥呢?那就說明下 JDBC 和 Spring Data 的關(guān)系。
Spring Data Reactive Repositories 突出點是 Reactive,即非阻塞的。區(qū)別如下:
基于 JDBC 實現(xiàn)的 Spring Data,比如 Spring Data JPA 是阻塞的。原理是基于阻塞 IO 模型 消耗每個調(diào)用數(shù)據(jù)庫的線程(Connection)。
事務(wù)只能在一個 java.sql.Connection 使用,即一個事務(wù)一個操作。
二、構(gòu)建項目及配置本章不在講解如何構(gòu)建項目了,大家可以參考第一章。這里我們主要引入了mongodb-reactive框架,在pom文件加入下列內(nèi)容即可。
org.springframework.boot spring-boot-starter-data-mongodb-reactive
如何jar包后我們需要配置一下MongoDB數(shù)據(jù)庫,在application.properties文件中加入一下配置即可,密碼和用戶名需要替換自己的,不然會報錯的。
spring.data.mongodb.host=localhost spring.data.mongodb.port=27017 spring.data.mongodb.password=student2018.Docker_ spring.data.mongodb.database=student spring.data.mongodb.username=student三、創(chuàng)建實體及具體實現(xiàn) 3.1實體創(chuàng)建
package io.intodream.kotlin03.entity import org.springframework.data.annotation.Id import org.springframework.data.mongodb.core.mapping.Document /** * @description * * @author Jwenk * @copyright intoDream.io 筑夢科技 * @email [email protected] * @date 2019-03-25,18:05 */ @Document class Student { @Id var id :String? = null var name :String? = null var age :Int? = 0 var gender :String? = null var sClass :String ?= null override fun toString(): String { return ObjectMapper().writeValueAsString(this) } }3.2Repository
package io.intodream.kotlin03.dao import io.intodream.kotlin03.entity.Student import org.springframework.data.mongodb.repository.ReactiveMongoRepository /** * @description * * @author Jwenk * @copyright intoDream.io 筑夢科技 * @email [email protected] * @date 2019-03-25,18:04 */ interface StudentRepository : ReactiveMongoRepository3.3Service{ }
package io.intodream.kotlin03.service import io.intodream.kotlin03.entity.Student import reactor.core.publisher.Flux import reactor.core.publisher.Mono /** * @description * * @author Jwenk * @copyright intoDream.io 筑夢科技 * @email [email protected] * @date 2019-03-25,18:04 */ interface StudentService { /** * 通過學(xué)生編號獲取學(xué)生信息 */ fun find(id : String): Mono3.4 Controller實現(xiàn)/** * 查找所有學(xué)生信息 */ fun list(): Flux /** * 創(chuàng)建一個學(xué)生信息 */ fun create(student: Student): Mono /** * 通過學(xué)生編號刪除學(xué)生信息 */ fun delete(id: String): Mono } // 接口實現(xiàn)類 package io.intodream.kotlin03.service.impl import io.intodream.kotlin03.dao.StudentRepository import io.intodream.kotlin03.entity.Student import io.intodream.kotlin03.service.StudentService import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Service import reactor.core.publisher.Flux import reactor.core.publisher.Mono /** * @description * * @author Jwenk * @copyright intoDream.io 筑夢科技 * @email [email protected] * @date 2019-03-25,18:23 */ @Service class StudentServiceImpl : StudentService{ @Autowired lateinit var studentRepository: StudentRepository override fun find(id: String): Mono { return studentRepository.findById(id) } override fun list(): Flux { return studentRepository.findAll() } override fun create(student: Student): Mono { return studentRepository.save(student) } override fun delete(id: String): Mono { return studentRepository.deleteById(id) } }
package io.intodream.kotlin03.web import io.intodream.kotlin03.entity.Student import io.intodream.kotlin03.service.StudentService import org.slf4j.LoggerFactory import org.springframework.beans.factory.annotation.Autowired import org.springframework.web.bind.annotation.* import reactor.core.publisher.Flux import reactor.core.publisher.Mono /** * @description * * @author Jwenk * @copyright intoDream.io 筑夢科技 * @email [email protected] * @date 2019-03-25,18:03 */ @RestController @RequestMapping("/api/student") class StudentController { @Autowired lateinit var studentService: StudentService val logger = LoggerFactory.getLogger(this.javaClass) /** * 保存或新增學(xué)生信息 */ @PostMapping("/") fun create(@RequestBody student: Student): Mono四、接口測試{ logger.info("【保存學(xué)生信息】請求參數(shù):{}", student) return studentService.create(student) } /** * 更新學(xué)生信息 */ @PutMapping("/") fun update(@RequestBody student: Student): Mono { logger.info("【更新學(xué)生信息】請求參數(shù):{}", student) return studentService.create(student) } /** * 查找所有學(xué)生信息 */ @GetMapping("/list") fun listStudent(): Flux { return studentService.list() } /** * 通過學(xué)生編號查找學(xué)生信息 */ @GetMapping("/id") fun student(@RequestParam id : String): Mono { logger.info("查詢學(xué)生編號:{}", id) return studentService.find(id) } /** * 通過學(xué)生編號刪除學(xué)生信息 */ @DeleteMapping("/") fun delete(@RequestParam id: String): Mono { logger.info("刪除學(xué)生編號:{}", id) return studentService.delete(id) } }
這里我們使用Postman來對接口進(jìn)行測試,關(guān)于Postman這里接不用做過多的介紹了,不懂可以自行百度。
控制臺打印如下:
2019-03-25 18:57:04.333 INFO 2705 --- [ctor-http-nio-3] i.i.kotlin03.web.StudentController : 【保存學(xué)生信息】請求參數(shù):{"id":"1","name":"Tom","age":18,"gender":"Boy","sclass":"First class"}
我們看一下數(shù)據(jù)庫是否存儲了
其他接口測試情況
如果大家覺得文章有用麻煩點一下贊,有問題的地方歡迎大家指出來。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/77524.html
摘要:一本節(jié)目標(biāo)前兩章主要講了的基本操作,這一章我們將學(xué)習(xí)使用訪問,并通過完成簡單操作。這里有一個問題什么不選用數(shù)據(jù)庫呢答案是目前支持。突出點是,即非阻塞的。二構(gòu)建項目及配置本章不在講解如何構(gòu)建項目了,大家可以參考第一章。 showImg(https://segmentfault.com/img/remote/1460000018819338?w=1024&h=500); 一、本節(jié)目標(biāo) 前兩...
摘要:二教程環(huán)境三創(chuàng)建項目創(chuàng)建項目有兩種方式一種是在官網(wǎng)上創(chuàng)建二是在上創(chuàng)建如圖所示勾選然后點,然后一直默認(rèn)最后點擊完成即可。我們這里看到和普通的接口沒有異同,除了返回類型是用包裝之外。與之對應(yīng)的還有,這個后面我們會講到。 showImg(https://segmentfault.com/img/remote/1460000018819338?w=1024&h=500); 從去年開始就開始學(xué)習(xí)...
摘要:下一代服務(wù)端開發(fā)下一代服務(wù)端開發(fā)第部門快速開始第章快速開始環(huán)境準(zhǔn)備,,快速上手實現(xiàn)一個第章企業(yè)級服務(wù)開發(fā)從到語言的缺點發(fā)展歷程的缺點為什么是產(chǎn)生的背景解決了哪些問題為什么是的發(fā)展歷程容器的配置地獄是什么從到下一代企業(yè)級服務(wù)開發(fā)在移動開發(fā)領(lǐng)域 《 Kotlin + Spring Boot : 下一代 Java 服務(wù)端開發(fā) 》 Kotlin + Spring Boot : 下一代 Java...
showImg(https://segmentfault.com/img/remote/1460000018819338?w=1024&h=500); 在開發(fā)項目中,我們經(jīng)常會需要打印日志,這樣方便開發(fā)人員了解接口調(diào)用情況及定位錯誤問題,很多時候?qū)τ贑ontroller或者是Service的入?yún)⒑统鰠⑿枰蛴∪罩?,但是我們又不想重?fù)的在每個方法里去使用logger打印,這個時候希望有一個管理者統(tǒng)一...
摘要:在配置下上面啟動的配置數(shù)據(jù)庫名為賬號密碼也為。突出點是,即非阻塞的。四對象修改包里面的城市實體對象類。修改城市對象,代碼如下城市實體類城市編號省份編號城市名稱描述注解標(biāo)記對應(yīng)庫表的主鍵或者唯一標(biāo)識符。 摘要: 原創(chuàng)出處 https://www.bysocket.com 「公眾號:泥瓦匠BYSocket 」歡迎關(guān)注和轉(zhuǎn)載,保留摘要,謝謝! 這是泥瓦匠的第104篇原創(chuàng) 文章工程: JDK...
閱讀 1992·2021-11-22 14:45
閱讀 2612·2021-10-12 10:11
閱讀 776·2021-09-22 10:02
閱讀 1233·2019-08-30 15:55
閱讀 1147·2019-08-30 15:54
閱讀 3258·2019-08-30 15:54
閱讀 1196·2019-08-29 17:16
閱讀 3093·2019-08-28 17:55