1. 程式人生 > >Kotlin整合Spring Boot實現資料庫增刪改查(mybatis版)

Kotlin整合Spring Boot實現資料庫增刪改查(mybatis版)

前幾天由於工作需要,便開始學習了kotlin,java基礎紮實學起來也還算比較快,對於kotlin這個程式語言自然是比java有趣一些,因此就有了使用kotlin搭建基於spring boot的開發環境。這次先分享mybatis版本的

1 maven的pom檔案

<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>
kotlin相關的東西就不特別挑出來了,也基本是固定的寫法

2 spring boot的主配置檔案和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
資料來源的配置還和之前一樣,特別注意mybatis的這段配置,大家根據實際情況調整就行
<?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有了一些差異
package com.debug.pojo

data class UserInfo (
	
	val id:Int,
	val name:String?=null,
	val address:String?=null
)
4 編寫對映器,和java的寫法區別不是太大
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的注入,需要在前面加上lateinit

6  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>