点击上方蓝色字体,选择“标星公众号”

优质文章,第一时间送达

关注公众号后台回复paymall获取实战项目资料+视频

作者:ride

segmentfault.com/a/1190000014912005?utm_source=sf-related

开始前需要有java基础, SpringBoot基础和kotlin基础

kotlin参考kotlin中文站的教程, 相信对于一个Java程序员来说, 半天就能上手了

为什么选择Kotlin

Kotlin比起java来说更加简洁, 和java一样是基于JVM的编程语言, 网上关于Kotlin优点缺点的讨论也有很多, 这里就不展开了.

之前对于kotlin的了解甚少, 只知道在去年的google I/O大会上成了安卓的第一语言, 其他就不了解了. 现在趁暑假前, 先学习一下kotlin.

教程开始

创建一个SpringBoot工程

首先当然是使用IDEA创建一个SpringBoot工程

这里语言选择Kotlin, 使用gradle进行管理, 之后再选择模块的时候只要选择上web, jpa和mysql就可以了

然后修改配置文件, 因为导入了jpa, 所以一定要设置好DataSource, 否则无法启动

spring:datasource:driver-class-name: com.mysql.jdbc.Driverusername: rootpassword: ABCabc123#url: jdbc:mysql://localhost:3306/db_test?useSSL=false

配置完成后可以, 在source目录下可以看到已经创建好了一个Application.kt文件, 用于启动SpringBoot, 对应Java下的Application.java 文件

@SpringBootApplication
class TestApplicationfun main(args: Array<String>) {runApplication<TestApplication>(*args)
}

创建Controller

@RestController
@RequestMapping("/hello")
class HelloController {@GetMappingfun hello():String {return "hello world"}
}

和java的写法非常像, 可以无缝转换

启动!

使用curl命令进行请求

➜  ~ curl "http://localhost:8080/hello"
hello world

简单的请求完成了

使用Swagger2生成接口文档

使用Swagger2可以自动生成接口文档和进行接口测试, 极大的方便了后端, 不需要去花很大的功夫获去维护文档

首先试试导入Swagger2

    compile group: 'io.springfox', name: 'springfox-swagger2', version: '2.8.0'compile group: 'io.springfox', name: 'springfox-swagger-ui', version: '2.8.0'

配置Swagger2

@Configuration
@EnableSwagger2
class Swagger2 {@Beanfun createRestApi(): Docket {return Docket(DocumentationType.SWAGGER_2)  // 使用Swagger2.apiInfo(apiInfo())                 // 设置接口页面信息.select()                           // 返回ApiSelectorBuilder的实例.apis(RequestHandlerSelectors.basePackage("io.ride.vote.web"))      // api接口所在的包.paths(PathSelectors.any())         .build()}/*** 页面信息展示*/private fun apiInfo(): ApiInfo {return ApiInfoBuilder().title("Vote RestFul APIs文档").description("项目API接口文档").contact(Contact("ride", "", "supreDong@gamil.com")).version("0.0.1").build()}
}

***@Configuration***注解表明这是一个配置类, ***@EnableSwagger2***注解表明启用Swagger2

通过在controller中添加注解来生成api文档

@Api(value = "测试", description = "测试控制器")
@RestController
@RequestMapping("/hello")
class HelloController {@GetMapping@ApiOperation("你好!世界!", notes = "返回hello world")fun hello(): String {return "hello world"}
}

之后打开**http://localhost:8080/swagger-ui.html**可以看到生成的接口信息如图, 在该页面上还以对接口进行测试

统一异常处理

和java下的操作是一致的, 只是把java翻译成了kotlin

@ControllerAdvice
class CustomExceptionHandler {@ExceptionHandler(ApiException::class)fun handlerApiException(e: ApiException): ResponseEntity<Result> {val result = Result(e.code, e.data)return result.ok()}@ExceptionHandler(MissingServletRequestParameterException::class)fun handMissingServletRequestParameterException(e: MissingServletRequestParameterException): ResponseEntity<Result> {val result = Result(HttpStatus.BAD_REQUEST.value(), e.message)return result.ok()}}class ApiException(val code: ResultCode, val data: HashMap<String, Any>? = null) : RuntimeException(code.msg)

使用JPA

首先配置JPA:

spring:jpa:show-sql: truehibernate:ddl-auto: updatedatabase: mysql

创建data类

@Entity
@Table(name = "t_user")
data class User(@Id@GeneratedValue(strategy = GenerationType.IDENTITY)var id: Long = -1,@Column(nullable = false)var username: String? = null,@Column(nullable = false)var password: String? = null,@Column(nullable = false)var email: String? = null,@Column(nullable = true)var nickname: String? = null,@Column(nullable = false)var createTime: Date = Date()
)

创建repository类

interface IUserService {/*** 添加一个用户*/fun addUser(user: User): User/*** 展示所有用户*/fun listAll(): List<User>/*** 删除一个用户*/fun deleteUser(id: Long)}

进行单元测试

@RunWith(SpringRunner::class)
@SpringBootTest
class UserRepositoryTest {@Autowiredprivate lateinit var userRepository: UserRepository@Testfun `find all user test`() {println(userRepository.findAll())}@Testfun `add user test`() {val user = User(username = "ride", email = "supreDong@gmail.com", password = "123123", nickname = "ride")println(userRepository.save(user))}@Testfun `delete user test`() {val user = userRepository.findById(1)println(user.orElse(null))if (user.isPresent)userRepository.deleteById(user.get().id)}
}

在单元测试并且只能在单元测试中(kotlin1.2)可以使用反引号来定义方法

总结

使用使用kotlin结合SpringBoot是一种从船新体验, 推荐大家尝试一下

有热门推荐????

Java实现QQ登录和微博登录

推荐 5 款好用的REST API工具

一口气说了 6种 数据脱敏方案,大厂也这么用!

新技能 MyBatis 千万数据表,快速分页!

2020搞个 Mac 玩玩

10w行级别数据的Excel导入,4版完整优化记录,效果太明显了!

用Java实现一个抽奖系统(附完整代码)

推荐一个基于SpringBoot + Mybatis + Vue的代码生成器

点击阅读原文,前往学习SpringCloud实战项目

长见识了,Kotlin + SpringBoot + JPA 整合开发比Java更爽...相关推荐

  1. java后台如何实现让用户可以在页面修改数据表_长见识了,Kotlin + SpringBoot + JPA 整合开发比Java更爽......

    点击上方蓝色字体,选择"标星公众号" 优质文章,第一时间送达 关注公众号后台回复pay或mall获取实战项目资料+视频 作者:ride segmentfault.com/a/119 ...

  2. springboot+rabbitMq整合开发实战一

    springboot+rabbitMq整合开发实战一 消息队列mq相信诸位都听过,甚至还用的相当娴熟,我也是近来才接触,个人感觉相当不错,特别是在业务模块的开发中进行异步解耦有很大的作用.这篇博文主要 ...

  3. springboot JPA整合国产神通数据库(神州通用数据库)

    当前国产软件比较流行,就最近做过的springboot +JPA+神通数据库的项目做下记录供有需要的同学参考. 神通数据库在springboot中的配置和大多关系型数据库基本一样的,只是由于驱动jar ...

  4. java 银联接口_银联支付接口整合开发(java)

    一.环境1.Eclipse Juno R22. Tomcat 73. Jersey 2.7 下载地址(https://jersey.java.net/download.html)二.流程1.Eclip ...

  5. 补习系列(19)-springboot JPA + PostGreSQL

    目录 SpringBoot 整合 PostGreSQL 一.PostGreSQL简介 二.关于 SpringDataJPA 三.整合 PostGreSQL A. 依赖包 B. 配置文件 C. 模型定义 ...

  6. 视频教程-springboot+Vue整合前后端分离权限后台管理系统-Java

    springboot+Vue整合前后端分离权限后台管理系统 拥有八年的Java项目开发经验,擅长Java.vue.SpringBoot.springCloud.spring.springmvc.myb ...

  7. javaee互联网轻量级框架整合开发_整合MyBatis的关键点及快速入门

    对于从事Web应用开发人员,Java EE平台如今已经成为电信.金融.电子商务.保险.证券等各行业的大型应用系统的首选开发平台.在企业级应用的开发选择上,.NET已趋式微,PHP通常只用于开发一些企业 ...

  8. 第13章 Kotlin 集成 SpringBoot 服务端开发(1)

    第13章 Kotlin 集成 SpringBoot 服务端开发 本章介绍Kotlin服务端开发的相关内容.首先,我们简单介绍一下Spring Boot服务端开发框架,快速给出一个 Restful He ...

  9. maven netty 配置_使用Springboot整合开发Netty(一个表白的小案例)

    写了很久的java并发包里面的文章,今天换一个口味.很早之前学的Netty,由于最近项目经常使用到,遇到了很多坑,因此想通过一个体系教程说一下这个高性能异步通信框架Netty,这也是netty的第一篇 ...

最新文章

  1. Windows Server基础架构云参考架构:硬件之上的设计
  2. 每日一博 - tcpdump小技巧
  3. Py之pygame:有趣好玩——利用pygame库实现一个移动底座弹球的小游戏
  4. 移动端0.5px的实现
  5. CSS/Compass修改placeholder的文字样式
  6. 使用Spring Boot和H2可以完全工作的原型
  7. c++ public private protect
  8. 百度地图InfoWindow弹窗圆角
  9. 《SpringBoot实战》笔记1
  10. 在win7 64位上安装VS2015的问题汇总
  11. 【牛客网刷题系列 之 Verilog快速入门】~ 异步复位的串联T触发器、奇偶校验
  12. java关于时间的换算
  13. java poi word bookmarks_poi根据word/excel模板(书签)创建导出word/excel文档
  14. 图像分割之分水岭分割算法
  15. 计算机软件操作试题多选,2016职称计算机考试WPS_Office多选试题及答案
  16. Mac OSX: 有线共享WiFi
  17. 三星苹果还能笑多久?联想挑战智能手机全球霸主
  18. 01 PhantomReference没有进入ReferenceQueue
  19. Microsoft Dynamics AX2012 R2吐槽系列(4)
  20. 再读杨绛_RWERWERWE_96921_新浪博客

热门文章

  1. 郑莉老师c++第五版 复习笔记
  2. 2019计算机打字题,2019打字年度考核个人总结
  3. 杭电OJ--1717
  4. 2022年全球市场砂纸总体规模、主要生产商、主要地区、产品和应用细分研究报告
  5. Java 读书笔记1
  6. 网御星云防火墙端口映射配置
  7. 8.PS-快速掌握人物祛斑
  8. 【路由交换技术】Cisco Packet Tracer路由器子接口
  9. sql语句异常 You have an error in your SQL syntax; check the manual that corresponds to your.......
  10. GBASE南大通用携手长亮科技 重磅推出金融数据仓库联合解决方案