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”。