kotlin + springboot整合mybatis操作mysql数据库及单元测试

项目mybatis操作数据库参考:

http://how2j.cn/k/springboot/springboot-mybatis/1649.html?p=78908

junit对controller层测试参考:

https://www.cnblogs.com/PollyLuo/p/9630822.html

mysql版本:5.5.62

 点击下载

1、kotlin版springboot项目创建

访问https://start.spring.io/, 创建项目demo(maven + kotlin + springboot 2.1.7, 其他默认)。

2、创建数据库及表

create database test;
use test;
CREATE TABLE category_ (
  id int(11) NOT NULL AUTO_INCREMENT,
  name varchar(30),
  PRIMARY KEY (id)
) DEFAULT CHARSET=UTF8;

insert into category_ values(null, 'Aa');
insert into category_ values(null, 'Bb');
insert into category_ values(null, 'Cc');
insert into category_ values(null, 'Dd');
insert into category_ values(null, 'Ee');
insert into category_ values(null, 'Ff');
insert into category_ values(null, 'Gg');


insert into category_ values(null, 'Hh');
insert into category_ values(null, 'Ii');
insert into category_ values(null, 'Jj');
insert into category_ values(null, 'Kk');
insert into category_ values(null, 'Ll');
insert into category_ values(null, 'Mm');
insert into category_ values(null, 'Nn');


insert into category_ values(null, 'Oo');
insert into category_ values(null, 'Pp');
insert into category_ values(null, 'Qq');
insert into category_ values(null, 'Rr');
insert into category_ values(null, 'Ss');
insert into category_ values(null, 'Tt');


insert into category_ values(null, 'Uu');
insert into category_ values(null, 'Vv');
insert into category_ values(null, 'Ww');
insert into category_ values(null, 'Xx');
insert into category_ values(null, 'Yy');
insert into category_ values(null, 'Zz');

 

3、将项目demo导入idea,等待maven导入依赖jar包。

修改pom.xml,增加mysql数据库连接jar包。

        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>

在src/main/resources包下的application.properties文件中增加数据库访问参数(包括mysql数据库用户名及密码)、端口号等。

server.port=8080

spring.datasource.password=admin
spring.datasource.username=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&useSSL=false

在com.example.demo目录下新建entity包,创建类Category.kt

package com.example.demo.entity

class Category {
    var id : Int? = null;
    var name : String? = null;
}

修改pom.xml,增加mybatis注解jar包。

        <!-- mybatis -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.1.1</version>
        </dependency>    

在com.example.demo包下创建mapper包,创建接口类CategoryMapper.kt, 实现增、删、改、查。

package com.example.demo.mapper

import com.example.demo.entity.Category
import org.apache.ibatis.annotations.*

@Mapper
interface CategoryMapper {

    @Select(" select * from category_")
    fun list() : List<Category>

    @Insert(" insert into category_ values(null, #{name})")
    fun insert(category: Category) : Int

    @Delete(" delete from category_ where id = #{id}")
    fun delete(id : Int)

    @Update(" update category_ set name=#{name} where id = #{id}")
    fun update(category: Category) : Int

    @Select( " select * from category_ where id = #{id}")
    fun get(id : Int) : Category


}

修改pom.xml增加相关依赖,在src/test/kotlin路径下com.example.demo路径下创建类CategoryMapperTest.kt,并执行相关测试。

        <!-- https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-test-junit5 -->
        <dependency>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-test-junit5</artifactId>
            <version>1.2.70</version>
            <scope>test</scope>
        </dependency>

 

package com.example.demo

import com.example.demo.mapper.CategoryMapper
import org.junit.Assert
import org.springframework.boot.test.context.SpringBootTest
import javax.annotation.Resource
import kotlin.test.Test


@SpringBootTest
class CategoryMapperTest {

    @Resource
    private lateinit var categoryMapper1: CategoryMapper

    @Resource
    private val categoryMapper2: CategoryMapper? = null

    @Test
    fun test() {
        val size1 = categoryMapper1.list().size;
        val size2 = categoryMapper2!!.list().size;
        Assert.assertEquals(size1, size2)
    }

}

 

4、修改pom.xml,添加web相关依赖。

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

在src/main/kotlin目录下com.example.demo包下新建controller包,创建kotlin类HelloController.kt

package com.example.demo.controller

import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RestController

@RestController
class HelloController {

    @GetMapping("/hello")
    fun hello() : String {
        return "hello";
    }
}

修改pom.xml,  添加单元测试相关依赖。

        <!-- https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-test-junit5 -->
        <dependency>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-test-junit5</artifactId>
            <version>1.2.70</version>
            <scope>test</scope>
        </dependency>

在src/test/kotlin路径下 com.example.demo包下创建kotlin类HelloControllerTest.kt

package com.example.demo

import org.junit.jupiter.api.Test
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.http.HttpMethod
import org.springframework.test.context.web.WebAppConfiguration
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders
import org.springframework.test.web.servlet.result.MockMvcResultMatchers.status
import org.springframework.test.web.servlet.setup.MockMvcBuilders
import org.springframework.web.context.WebApplicationContext
import javax.annotation.Resource

@SpringBootTest
@WebAppConfiguration
class HelloControllerTest {

    @Resource
    private lateinit var wac : WebApplicationContext

    @Test
    fun test() {
        val mockMvc = MockMvcBuilders.webAppContextSetup(wac).build()
        val result = mockMvc.perform(MockMvcRequestBuilders.request(HttpMethod.GET, "/hello"))
                .andExpect(status().isOk)
                .andDo(::println)
                .andReturn().response.contentAsString;
        println(result)
    }

}

点击HelloControllerTest类前的三角号,即可执行单元测试,在下方窗口看到输出结果“hello”。

 

posted @ 2019-08-09 00:19  笪笠  阅读(1619)  评论(0编辑  收藏  举报