Kotlin整合Spring Boot實現資料庫增刪改查(mybatis版)
阿新 • • 發佈:2018-12-24
前幾天由於工作需要,便開始學習了kotlin,java基礎紮實學起來也還算比較快,對於kotlin這個程式語言自然是比java有趣一些,因此就有了使用kotlin搭建基於spring boot的開發環境。這次先分享mybatis版本的
1 maven的pom檔案
kotlin相關的東西就不特別挑出來了,也基本是固定的寫法<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.0</modelVersion> <groupId>com.debug</groupId> <artifactId>KSpringBoot</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>KSpringBoot</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.0.BUILD-SNAPSHOT</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-stdlib-jre8</artifactId> <version>1.1.2</version> </dependency> <dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-reflect</artifactId> <version>1.1.2</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.module</groupId> <artifactId>jackson-module-kotlin</artifactId> <version>2.9.3</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> <repositories> <repository> <id>spring-snapshots</id> <name>Spring Snapshots</name> <url>https://repo.spring.io/libs-snapshot</url> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <build> <pluginManagement> <plugins> <plugin> <artifactId>kotlin-maven-plugin</artifactId> <groupId>org.jetbrains.kotlin</groupId> <version>1.1.2</version> <configuration> <compilerPlugins> <plugin>spring</plugin> </compilerPlugins> <jvmTarget>1.8</jvmTarget> </configuration> <executions> <execution> <id>compile</id> <phase>compile</phase> <goals> <goal>compile</goal> </goals> </execution> <execution> <id>test-compile</id> <phase>test-compile</phase> <goals> <goal>test-compile</goal> </goals> </execution> </executions> <dependencies> <dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-maven-allopen</artifactId> <version>1.1.2</version> </dependency> </dependencies> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!--fork : 如果沒有該項配置,devtools不會起作用,即應用不會restart --> <fork>true</fork> </configuration> </plugin> </plugins> </pluginManagement> </build> </project>
2 spring boot的主配置檔案和mybatis配置檔案
資料來源的配置還和之前一樣,特別注意mybatis的這段配置,大家根據實際情況調整就行#DataBase DataSources spring.datasource.url = jdbc:mysql://localhost:3306/debugxwz spring.datasource.username = root spring.datasource.password = 123456 spring.datasource.driverClassName = com.mysql.jdbc.Driver spring.datasource.max-active=20 spring.datasource.max-idle=8 spring.datasource.min-idle=8 spring.datasource.initial-size=10 mybatis.typeAliasesPackage=com.debug.pojo mybatis.config-location=classpath:mybatis-config.xml mybatis.mapperLocations=classpath:mapper/*.xml logging.level.com.debug=debug
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--根據需要加入有關配置-->
</configuration>
3 編寫實體類,因為是kotlin寫法和之前java有了一些差異
4 編寫對映器,和java的寫法區別不是太大package com.debug.pojo data class UserInfo ( val id:Int, val name:String?=null, val address:String?=null )
package com.debug.dao
import org.apache.ibatis.annotations.Mapper
import com.debug.pojo.UserInfo
@Mapper
interface UserMapper {
//根據id獲取使用者資訊
fun findUserById(questionId: Int): UserInfo
//儲存使用者資訊
fun saveUser(user:UserInfo)
//修改使用者資訊
fun updateUser(user:UserInfo)
//刪除使用者資訊
fun removeUserById(user:UserInfo)
}
5 service層程式碼
package com.debug.service
import com.debug.pojo.UserInfo
import org.springframework.transaction.annotation.Transactional
import org.springframework.transaction.annotation.Propagation
interface IUserService {
fun findUserById(userId: Int): UserInfo
fun saveUser(user:UserInfo)
fun updateUser(user:UserInfo)
fun removeUserById(user:UserInfo)
}
package com.debug.service.impl
import com.debug.service.IUserService
import javax.annotation.Resource
import com.debug.dao.UserMapper
import com.debug.pojo.UserInfo
import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Transactional
import javafx.scene.control.Pagination
import org.springframework.transaction.annotation.Propagation
@Service(value="userSrvice")
open class UserService:IUserService{
@Resource
lateinit var userMapper:UserMapper
override fun findUserById(userId: Int):UserInfo{
return userMapper.findUserById(userId)
}
@Transactional(propagation=Propagation.REQUIRED)
override fun saveUser(user:UserInfo){
userMapper.saveUser(user)
}
@Transactional(propagation=Propagation.REQUIRED)
override fun updateUser(user:UserInfo){
userMapper.updateUser(user)
}
@Transactional(propagation=Propagation.REQUIRED)
override fun removeUserById(user:UserInfo){
userMapper.removeUserById(user)
}
}
需要注意和java不同的是,如果有bean的注入,需要在前面加上lateinit6 controller的程式碼
package com.debug.controller
import org.springframework.web.bind.annotation.RestController
import javax.annotation.Resource
import com.debug.service.IUserService
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.ResponseBody
import com.debug.pojo.UserInfo
import javax.servlet.http.HttpServletRequest
import com.debug.service.impl.UserService
@RestController
class UserController {
@Resource
lateinit var userService: IUserService;
@RequestMapping("/getUserById")
@ResponseBody
fun getUserById(req:HttpServletRequest):UserInfo {
val id:Int=Integer.parseInt(req.getParameter("id"))
val info:UserInfo=userService.findUserById(id)
return info
}
@RequestMapping("/saveUser")
@ResponseBody
fun saveUser():String {
val u=UserInfo(0,"蔡依林","河南")
userService.saveUser(u)
return "儲存成功";
}
@RequestMapping("/updateUser")
@ResponseBody
fun updateUser():String {
val u=UserInfo(3,"趙雅芝")
userService.updateUser(u)
return "修改成功";
}
@RequestMapping("/removeUserById")
@ResponseBody
fun removeUserById():String {
val u=UserInfo(4)
userService.removeUserById(u)
return "刪除成功";
}
}
controller和之前java的也沒太大的差別7 啟動程式的kotlin類
package com.debug
import org.springframework.boot.SpringApplication
import org.springframework.boot.autoconfigure.SpringBootApplication
@SpringBootApplication
open class KotlinDemoApplication
fun main(args: Array<String>) {
SpringApplication.run(KotlinDemoApplication::class.java, *args)
}
這裡注意不能少些open,否則spring boot起不來還會報一堆異常
下面順帶把mybatis的配置檔案貼一貼:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.debug.dao.UserMapper" >
<resultMap id="userBaseResultMap" type="com.debug.pojo.UserInfo" >
<id column="id" property="id" />
<result column="name" property="name" />
<result column="address" property="address" />
</resultMap>
<sql id="User_Base_Column_List" >
id, name, address
</sql>
<select id="findUserById" resultMap="userBaseResultMap" >
SELECT
<include refid="User_Base_Column_List" />
FROM user
WHERE id = #{id}
</select>
<insert id="saveUser" parameterType="com.debug.pojo.UserInfo">
insert into user(name,address) values(#{name},#{address})
</insert>
<update id="updateUser" parameterType="com.debug.pojo.UserInfo">
update user
<trim prefix="SET" suffixOverrides=",">
<if test="name != null">
name = #{name}
</if>
<if test="address != null">
address = #{address}
</if>
</trim>
where id=#{id}
</update>
<delete id="removeUserById" parameterType="com.debug.pojo.UserInfo">
delete from user where id=#{id}
</delete>
</mapper>