Kotlin 是一个基于 JVM 的编程语言,它的简洁、便利早已不言而喻。Kotlin 能够胜任 Java 做的所有事。Kotlin已经普遍应用于安卓客户端的开发,提供了各种语法糖和判空机制,算是一款抓住了Java目前存在的弊端重拳出击的语言。这篇文章使用Kotlin整合SpringBoot进行简单的MySQL与Redis操作
1.新建Maven项目,main目录代码文件夹名称默认是java,可以改成kotlin,也可以不改
2.新建对应的包和Application.kt启动文件,idea会自动检测是否需要配置成kotlin编译,选择对应的选项idea会在pom.xml文件中加入编译相关的代码
3.导入相关的依赖SpringBoot,MyBatis,Redis等等
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.1.6.RELEASEversion>
<relativePath/>
parent>
<groupId>com.tarcy.ktSpringBootgroupId>
<artifactId>com-tarcy-ktSpringBootartifactId>
<version>1.0-SNAPSHOTversion>
<properties>
<kotlin.version>1.3.72kotlin.version>
properties>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlingroupId>
<artifactId>kotlin-stdlib-jdk8artifactId>
<version>${kotlin.version}version>
dependency>
<dependency>
<groupId>org.jetbrains.kotlingroupId>
<artifactId>kotlin-testartifactId>
<version>${kotlin.version}version>
<scope>testscope>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starterartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>8.0.16version>
dependency>
<dependency>
<groupId>org.mybatis.spring.bootgroupId>
<artifactId>mybatis-spring-boot-starterartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-data-redisartifactId>
dependency>
dependencies>
<build>
<sourceDirectory>src/main/kotlinsourceDirectory>
<plugins>
<plugin>
<groupId>org.jetbrains.kotlingroupId>
<artifactId>kotlin-maven-pluginartifactId>
<version>${kotlin.version}version>
<executions>
<execution>
<id>compileid>
<phase>compilephase>
<goals>
<goal>compilegoal>
goals>
execution>
<execution>
<id>test-compileid>
<phase>test-compilephase>
<goals>
<goal>test-compilegoal>
goals>
execution>
executions>
<configuration>
<jvmTarget>1.8jvmTarget>
configuration>
plugin>
plugins>
build>
project>
4.在Resources文件夹新建application.yml,填写相关的配置信息
server:
port: 8080
spring:
application:
name: KotlinSpringBoot
#数据库连接信息
datasource:
url: jdbc:mysql:///test?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
#Redis连接信息
redis:
host: 192.168..
port: 6479
@Controller
@RequestMapping("/api/users")
open class UserApi {
@RequestMapping("/{id}")
@ResponseBody
open fun test1(@PathVariable id: Long): String{
return "你好,用户$id"
}
}
1.新建一张简单的用户表,并添加数据
2.编写User实体类,可以选择以构造方法的方式编写实体,也可以写在类里面
data class User(var id: Long? = -1, var username: String = "", val age: Int? = 0)
3.在Mapper包内编写SQL相关的语句与代码
@Mapper
interface UserMapper {
@Select("SELECT * FROM USER WHERE USERNAME = #{username}")
fun findByUserName(@Param("username") username: String): List<User>
@Select("SELECT * FROM USER WHERE ID = #{id}")
fun findUserById(@Param("id") id: Long): User
@Insert("INSERT INTO USER(USERNAME, PASSWORD) VALUES(#{username}, #{password})")
fun insert(@Param("username") username: String, @Param("password") password: String): Int
}
4.在Service包里编写接口UserService,实现对应方法
interface UserService{
fun findUserById(id: Long):User
}
@Service
class UserServiceImpl : UserService{
/* kotlin中建议以lateinit var修饰依赖注入的属性,表示延迟初始化。当无法在构造函数提供非空初始器,并避免属性的空检查时加入lateinit关键字修饰对应属性
*/
@Resource
lateinit var userMapper: UserMapper
/*当然,类似java开发常用的写法也是可行的。kotlin对于空对象的判定非常严格,记得加上空检查并赋予初始值。在调用属性方法前都需做判空处理,例如userMapper?.findUserById
@Autowired
private val userMapper: UserMapper? = null
*/
override fun findUserById(id: Long): User {
return userMapper.findUserById(id)
}
}
5.在controller中编写方法并测试
@Resource
lateinit var userService: UserService
@RequestMapping("/{id}")
@ResponseBody
open fun findUserById(@PathVariable id: Long): User {
return userService.findUserById(id)
}
1.加入对应依赖,前面的pom.xml里已经加入
2.编写对应Service方法,模拟生成验证码与检验验证码的业务
@Resource
lateinit var redisTemplate: RedisTemplate<Int,String>
override fun setCode(id: Int):String{
//生成验证码
val code = generateCode(6)
//把验证码保存到Redis中,两分钟过期
this.redisTemplate.opsForValue().set(id, code, 2, TimeUnit.MINUTES)
return code
}
override fun verifyCode(id: Int, code: String): Boolean {
var codeFromRedis = redisTemplate.opsForValue().get(id).toString()
return codeFromRedis == code
}
//生成n位数的随机数
fun generateCode(len: Int): String{
var bit = Math.pow(10,len)
var res = (Math.random()*9+1)*bit
return num.toString()
}
3.编写对应controller方法
@RequestMapping("/sendCode")
@ResponseBody
open fun sendCode(@RequestParam("userId") id: Int): String{
return "发送成功,验证码是${userService.setCode(id)}"
}
@RequestMapping("/verifyCode")
@ResponseBody
open fun verifyCode(@RequestParam("userId") id: Int,@RequestParam("code") code: String): String{
return if(userService.verifyCode(id, code)) "验证码正确,登录成功" else "验证码错误,请重试"
}
刚开始入门kotlin几天时间,花了两三天的时间学语法,两三天的时间用kotlin做了一些leecode题目,这两天尝试后端开发,尝试写一个小项目,写的不好的地方还请多多指教。