欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Spring Boot + Kotlin整合MyBatis的方法教程

程序员文章站 2023-11-26 20:21:34
前言 最近使用jpa比较多,再看看mybatis的xml方式写sql觉得不爽,接口定义与映射离散在不同文件中,使得阅读起来并不是特别方便。 因此使用spring boo...

前言

最近使用jpa比较多,再看看mybatis的xml方式写sql觉得不爽,接口定义与映射离散在不同文件中,使得阅读起来并不是特别方便。

因此使用spring boot去整合mybatis,在注解里写sql

参考《我的第一个kotlin应用

创建项目,在build.gradle文件中引入依赖

compile "org.mybatis.spring.boot:mybatis-spring-boot-starter:$mybatis_version"
compile "mysql:mysql-connector-java:$mysql_version"

完整的build.gradle文件

group 'name.quanke.kotlin'
version '1.0-snapshot'
buildscript {
 ext.kotlin_version = '1.2.10'
 ext.spring_boot_version = '1.5.4.release'
 ext.springfox_swagger2_version = '2.7.0'
 ext.mysql_version = '5.1.21'
 ext.mybatis_version = '1.1.1'
 repositories {
  mavencentral()
 }
 dependencies {
  classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
  classpath("org.springframework.boot:spring-boot-gradle-plugin:$spring_boot_version")

//  kotlin整合springboot的默认无参构造函数,默认把所有的类设置open类插件
  classpath("org.jetbrains.kotlin:kotlin-noarg:$kotlin_version")
  classpath("org.jetbrains.kotlin:kotlin-allopen:$kotlin_version")
 }
}
apply plugin: 'kotlin'
apply plugin: "kotlin-spring" // see https://kotlinlang.org/docs/reference/compiler-plugins.html#kotlin-spring-compiler-plugin
apply plugin: 'org.springframework.boot'
apply plugin: "kotlin-jpa" //https://*.com/questions/32038177/kotlin-with-jpa-default-constructor-hell
jar {
 basename = 'chapter11-6-5-service'
 version = '0.1.0'
}
repositories {
 mavencentral()
}
dependencies {
 compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version"
 compile("org.jetbrains.kotlin:kotlin-reflect:${kotlin_version}")
 compile "org.mybatis.spring.boot:mybatis-spring-boot-starter:$mybatis_version"
 compile "mysql:mysql-connector-java:$mysql_version"
 testcompile "org.springframework.boot:spring-boot-starter-test:$spring_boot_version"
 testcompile "org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version"

}
compilekotlin {
 kotlinoptions.jvmtarget = "1.8"
}
compiletestkotlin {
 kotlinoptions.jvmtarget = "1.8"
}

在application.yml文件中配置mysql的连接

spring:
 datasource:
 url: jdbc:mysql://localhost:3306/test
 username: root
 password: 123456
 driver-class-name: com.mysql.jdbc.driver

使用mybatis

在mysql中创建user表,包含id(bigint)、username(varchar)、age(int)字段。同时,创建映射对象user

data class user(var id: long? = -1, var username: string = "", val age: int? = 0)

创建user映射的操作usermapper,为了后续单元测试验证,实现插入和查询操作

import name.quanke.kotlin.chaper11_6_5.entity.user
import org.apache.ibatis.annotations.insert
import org.apache.ibatis.annotations.mapper
import org.apache.ibatis.annotations.param
import org.apache.ibatis.annotations.select
/**
 * created by http://quanke.name on 2018/1/11.
 */
@mapper
interface usermapper {
 @select("select * from user where username = #{username}")
 fun findbyusername(@param("username") username: string): list<user>
 @insert("insert into user(username, password) values(#{username}, #{password})")
 fun insert(@param("username") username: string, @param("password") password: string): int
}

启动 spring boot 类

import org.springframework.boot.springapplication
import org.springframework.boot.autoconfigure.springbootapplication
/**
 * created by http://quanke.name on 2018/1/9.
 */
@springbootapplication
class application
fun main(args: array<string>) {
 springapplication.run(application::class.java, *args)
}

单元测试

import name.quanke.kotlin.chaper11_6_5.repository.usermapper
import org.apache.commons.logging.logfactory
import org.junit.test
import org.junit.runner.runwith
import org.springframework.boot.test.context.springboottest
import org.springframework.test.context.junit4.springrunner
import javax.annotation.resource
/**
 * created by http://quanke.name on 2018/1/9.
 */
@runwith(springrunner::class)
@springboottest
class applicationtests {
 val log = logfactory.getlog(applicationtests::class.java)!!
 @resource
 lateinit var usermapper: usermapper
 @test
 fun `mybatis test"`() {
  log.info("查询用户名为【quanke.name】的用户:${usermapper.findbyusername("quanke.name")}")
  usermapper.insert("quanke", "123")
  log.info("查询用户名为【quanke】的用户:${usermapper.findbyusername("quanke")}")
 }
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。