使用注解的方式整合MyBatis
相对于传统的SSM框架整合而言,Spring Boot整合MyBatis开发更加快捷、方便,同时还支持包括注解和配置两种类型的整合方式。下面,使用注解的方式讲解Spring Boot与MyBatis的整合使用,具体步骤如下。
(1)创建Mapper接口文件。在chapter03项目中创建名为com.itheima.mapper的包,并在该包下创建一个用于对数据库表t_comment数据操作的接口CommentMapper,内容如文件1所示。
文件1 CommentMapper.java
1 import com.itheima.domain.Comment;
2 import org.apache.ibatis.annotations.*;
3 @Mapper
4 public interface CommentMapper {
5 @Select("SELECT * FROM t_comment WHERE id =#{id}")
6 public Comment findById(Integer id);
7 @Insert("INSERT INTO t_comment(content,author,a_id) " +
8 "values (#{content},#{author},#{aId})")
9 public int insertComment(Comment comment);
10 @Update("UPDATE t_comment SET content=#{content} WHERE id=#{id}")
11 public int updateComment(Comment comment);
12 @Delete("DELETE FROM t_comment WHERE id=#{id}")
13 public int deleteComment(Integer id);
14 }
文件1中,@Mapper注解表示该类是一个MyBatis接口文件,并保证能够被Spring Boot自动扫描到Spring容器中;在该接口内部,分别通过@Select、@Insert、@Update、@Delete注解配合SQL语句完成了对数据库表t_comment数据的增删改查操作。
小提示:
文件1中,在对应的接口类上添加了@Mapper注解,如果编写的Mapper接口过多时,需要重复为每一个接口文件添加@Mapper注解。为了解决这种麻烦,可以直接在Spring Boot项目启动类上添加@MapperScan("xxx")注解,不需要再逐个添加@Mapper注解,@MapperScan("xxx")注解的作用和@Mapper注解类似,但是它必须指定需要扫描的具体包名,例如@MapperScan("com.itheima.mapper")。
(2)编写单元测试进行接口方法测试。打开chapter03项目的测试类Chapter03ApplicationTests,在该测试类中引入CommentMapper接口,并对接口方法进行测试,内容如文件2所示。
文件2 Chapter03ApplicationTests.java
1 import com.itheima.mapper.CommentMapper;
2 import com.itheima.domain.*;
3 import org.junit.Test;
4 import org.junit.runner.RunWith;
5 import org.springframework.beans.factory.annotation.Autowired;
6 import org.springframework.boot.test.context.SpringBootTest;
7 import org.springframework.test.context.junit4.SpringRunner;
8 @RunWith(SpringRunner.class)
9 @SpringBootTest
10 public class Chapter03ApplicationTests {
11 @Autowired
12 private CommentMapper commentMapper;
13 @Test
14 public void selectComment() {
15 Comment comment = commentMapper.findById(1);
16 System.out.println(comment);
17 }
18 }
文件2中,先通过@Autowired注解引入了编写的CommentMapper接口,然后使用@Test注解针对该接口中的方法编写了对应的单元测试方法。由于篇幅限制,此处只针对CommentMapper接口中的数据查询编写了单元测试进行效果演示,读者在学习过程中可以编写其他的单元测试。
(3)整合测试。此处选取查询测试selectComment()方法进行效果演示,执行该方法后,控制台效果如图1所示。
图1 selectComment()方法执行结果
从图1可以看出,selectComment()方法执行成功,在控制台中打印出了查询的结果信息,这说明使用注解的方式整合MyBatis成功。
细心的读者会发现,控制台中查询的Comment的aId属性值为null,没有映射成功。这是因为编写的实体类Comment中使用了驼峰命名方式将t_comment表中的a_id字段设计成了aId属性,所以无法正确映射查询结果。为了解决上述由于驼峰命名方式造成的表字段值无法正确映射到类属性的情况,可以在Spring Boot全局配置文件application.properties中添加开启驼峰命名匹配映射配置,示例代码如下。
#开启驼峰命名匹配映射
mybatis.configuration.map-underscore-to-camel-case=true
在全局配置文件application.properties中配置开启驼峰命名匹配映射后,再次启动selectComment()单元测试方法,控制台效果如图2所示。
图2 selectComment()方法执行结果
从图2可以看出,开启驼峰命名匹配映射规则后,查询的t_comment表数据全部成功映射到与之对应的Comment实体类对象中。