前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringBoot-Kotlin

SpringBoot-Kotlin

作者头像
是小张啊喂
发布2021-08-09 17:41:05
1.1K0
发布2021-08-09 17:41:05
举报
文章被收录于专栏:软件软件

什么是Kotlin?

Kotlin
Kotlin

Kotlin(科特林)是一个用于现代多平台应用的静态编程语言 ,由 JetBrains 开发。

Kotlin可以编译成Java字节码,也可以编译成JavaScript,方便在没有JVM的设备上运行。除此之外Kotlin还可以编译成二进制代码直接运行在机器上(例如嵌入式设备或 iOS)。 [2]

Kotlin已正式成为Android官方支持开发语言。

文档

先来看一下Kotlin文档的地址

Kotlin中文文档:https://kotlinlang.org/

Kotlin英文文档:https://www.kotlincn.net/

语法

简单介绍几个不太一样的语法

属性

Kotlin类中的属性既可以用关键字 var 声明为可变的,也可以用关键字 val 声明为只读的。

变量

定义只读局部变量使用关键字 val 定义。只能为其赋值一次。

可重新赋值的变量使用 var 关键字

实现接口
代码语言:javascript
复制
class Child : MyInterface {
    override fun bar() {
        // 方法体
    }
}
空值与null检测

当某个变量的值可以为null的时候,必须在声明处的类型后添加 ? 来标识该引用可为空。

代码语言:javascript
复制
fun parseInt(str: String): Int? {}
When表达式

when 表达式取代了类 java 语言的 switch 语句。其最简单的形式如下:

代码语言:javascript
复制
when (x) {
    1 -> print("x == 1")
    2 -> print("x == 2")
    else -> { // 注意这个块
        print("x is neither 1 nor 2")
    }
}

如果 when 作为一个表达式使用,则必须有 else分支

语法还是有很多细节上的不同,感兴趣的自己可以去官方的文档查看,英文功底差一点的,推荐中文文档,不吃力,翻译的也比较精准

SpringBoot整合Kotlin

作为java开发者来说优先肯定是SpringBoot整合kotlin,简单易用

先来看一下依赖,如果你对你的网络有足够的自信的话,可以不配置maven仓库,否则的话你会发现你需要等待一个世纪

代码语言:javascript
复制
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
    id("org.springframework.boot") version "2.4.0"
    id("io.spring.dependency-management") version "1.0.10.RELEASE"
    kotlin("jvm") version "1.4.10"
    kotlin("plugin.spring") version "1.4.10"
}

group = "top.lzmvlog"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_11

repositories {
    maven {
        url = uri("https://maven.aliyun.com/repository/central")
    }
    maven {
        url = uri("https://maven.aliyun.com/repository/spring")
    }
    maven {
        url = uri("https://maven.aliyun.com/repository/gradle-plugin")
    }
    mavenCentral()
}

dependencies {
    implementation("org.springframework.boot:spring-boot-starter-webflux")
    implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
    implementation("io.projectreactor.kotlin:reactor-kotlin-extensions")
    implementation("org.jetbrains.kotlin:kotlin-reflect")
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-reactor")
    compileOnly("org.projectlombok:lombok")
    compileOnly("com.baomidou:mybatis-plus-boot-starter:3.1.0")
    runtimeOnly("mysql:mysql-connector-java")
    annotationProcessor("org.projectlombok:lombok")
    testImplementation("org.springframework.boot:spring-boot-starter-test")
    testImplementation("io.projectreactor:reactor-test")
}

tasks.withType<KotlinCompile> {
    kotlinOptions {
        freeCompilerArgs = listOf("-Xjsr305=strict")
        jvmTarget = "11"
    }
}

tasks.withType<Test> {
    useJUnitPlatform()
}

ymal配置

代码语言:javascript
复制
server:
  port: 9090

spring:
  application:
    name: authority
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/myschool?useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=GMT%2B8
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver

mybatis-plus:
  mapper-locations: classpath:/mapper/*.mapper
  type-aliases-package: top.lzmvlog.demokotlin.model
  configuration:
    cache-enabled: true
    call-setters-on-nulls: true
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

首先按照编程惯例,先来个Hello World给大家打个招呼

代码语言:javascript
复制
@RestController
class IndexController {

    @GetMapping("hello")
    fun hello(): String {
        return "Hello World"
    }
}

那下面就随便来个增删改查吧,老样子先看数据库,万年不变的学生表,主要是想偷懒

代码语言:javascript
复制
-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student`  (
  `id` varchar(225) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `name` varchar(225) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `age` int(0) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES ('0', '张三', 20);
INSERT INTO `student` VALUES ('1', '少杰', 20);
INSERT INTO `student` VALUES ('2', '赵云', 20);

MybatisPlus操作简单,就用这个为例操作就行

model

代码语言:javascript
复制
data class Student(
        var id: Int,
        var name: String,
        var age: Int
)

data class创建一个一个包含 getterssettersequals()hashCode()toString() 以及 copy()POJO,直呼内行,Lombok都不用了

Kotlin的语法表示,如果类中没有逻辑可以省略括号

Mapper

代码语言:javascript
复制
@Mapper
interface StudentMapper : BaseMapper<Student> {}

Service

代码语言:javascript
复制
 interface StudentService {

    /**
     * 查询学生集合
     */
    fun selectList(): List<Student>

    /**
     * 保存学生信息
     */
    fun save(student: Student): Int

    /**
     * 根据学生id删除
     */
    fun delete(id: Int): Int

    /**
     * 更新学生信息
     */
    fun update(student: Student): Int

    /**
     * 分页查询学生信息
     */
    fun selectPage(page: Page<Student>): IPage<Student>

}

ServiceImpl

代码语言:javascript
复制
@Service
class StudentServiceImpl : StudentService {

    @Autowired
    lateinit var studentMapper: StudentMapper

    /**
     * 查询所有学生
     */
    override fun selectList(): List<Student> {
        return studentMapper.selectList(Wrappers.query())
    }

    /**
     * 保存学生信息
     */
    override fun save(student: Student): Int {
        return studentMapper.insert(student)
    }

    /**
     * 根据学生id删除
     */
    override fun delete(id: Int): Int {
        return studentMapper.deleteById(id)
    }

    /**
     * 更新学生信息
     */
    override fun update(student: Student): Int {
        return studentMapper.updateById(student)
    }

    /**
     * 分页查询学生信息
     */
    override fun selectPage(page: Page<Student>): IPage<Student> {
        return studentMapper.selectPage(page, Wrappers.query())
    }
}

Controller

代码语言:javascript
复制
@RestController
class StudentController {

    @Autowired
    lateinit var studentServiceImpl: StudentServiceImpl

    /**
     * 查询学生信息
     */
    @GetMapping("select")
    fun select(): List<Student> {
        return studentServiceImpl.selectList()
    }

    /**
     * 保存学生信息
     */
    @PostMapping("save")
    fun save(@RequestBody student: Student): String {
        val save = studentServiceImpl.save(student)
        if (save == 1) {
            return "保存成功"
        }
        return "保存失败"
    }

    /**
     * 根据学生id删除学生信息
     */
    @DeleteMapping("delete/{id}")
    fun delete(@PathVariable id: Int): String {
        val delete = studentServiceImpl.delete(id)
        if (delete == 1) {
            return "删除成功"
        }
        return "删除失败"
    }

    /**
     * 修改学生信息
     */
    @PostMapping("update")
    fun update(@RequestBody student: Student): String {
        val update = studentServiceImpl.update(student)
        if (update == 1) {
            return "修改成功"
        }
        return "修改失败"
    }

    /**
     * 修改学生信息
     */
    @PostMapping("selectPage")
    fun selectPage(page: Page<Student>): IPage<Student> {
        return studentServiceImpl.selectPage(page);
    }

}
代码语言:javascript
复制
server:
  port: 9090

spring:
  application:
    name: authority
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/myschool?useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=GMT%2B8
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver

mybatis-plus:
  mapper-locations: classpath:/mapper/*.mapper
  type-aliases-package: top.lzmvlog.demokotlin.model
  configuration:
    cache-enabled: true
    call-setters-on-nulls: true
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

除了语法和Java有区别,别的都差不太多,没有什么特别的不一样的,唯一需要注意的是gradle在打包的时候,无法检测到SpringBoot的测试类,注释打包就会变得一切正常,暂时还不太明白是为什么,如果有解决方案,欢迎指教!

大家加油!距离2020年结束没多久了,奥里给!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-12-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是Kotlin?
  • 文档
  • 语法
    • 属性
      • 变量
        • 实现接口
          • 空值与null检测
            • When表达式
            • SpringBoot整合Kotlin
            • ymal配置
            • model
            • Mapper
            • Service
            • ServiceImpl
            • Controller
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档