使用配置文件的方式整合MyBatis
上一小节使用全注解的方式讲解了Spring Boot与MyBatis的整合使用,这种注解方式相对简单,但对于一些复杂的数据操作,使用注解的方式就显得非常麻烦。对于数据操作比较复杂的情况,开发中更倾向于使用配置文件的方式整合MyBatis。下面,使用配置文件的方式讲解Spring Boot与MyBatis的整合使用,具体步骤如下。
(1)创建Mapper接口文件。在chapter03项目的com.itheima.mapper的包中,创建一个用于对数据库表t_article数据操作的接口ArticleMapper,内容如文件1所示。
文件1 ArticleMapper.java
1 import com.itheima.domain.Article;
2 import org.apache.ibatis.annotations.Mapper;
3 @Mapper
4 public interface ArticleMapper {
5 public Article selectArticle(Integer id);
6 public int updateArticle(Article article);
7 }
文件1中,通过@Mapper注解定义了一个MyBatis接口文件,并在该接口中声明了进行文章查询和更新的两个操作方法。
(2)创建XML映射文件。在chapter03项目的resources目录下,创建一个统一管理映射文件的包mapper,并在该包下编写与ArticleMapper接口方应的映射文件ArticleMapper.xml,内容如文件2所示。
文件2 ArticleMapper.xml
1 <?xml version="1.0" encoding="UTF-8" ?>
2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
3 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
4 <mapper namespace="com.itheima.mapper.ArticleMapper">
5 <!-- 1、查询文章详细(包括评论信息) -->
6 <select id="selectArticle" resultMap="articleWithComment">
7 SELECT a.*,c.id c_id,c.content c_content,c.author
8 FROM t_article a,t_comment c
9 WHERE a.id=c.a_id AND a.id = #{id}
10 </select>
11 <resultMap id="articleWithComment" type="Article">
12 <id property="id" column="id" />
13 <result property="title" column="title" />
14 <result property="content" column="content" />
15 <collection property="commentList" ofType="Comment">
16 <id property="id" column="c_id" />
17 <result property="content" column="c_content" />
18 <result property="author" column="author" />
19 </collection>
20 </resultMap>
21 <!-- 2、根据文章id更新文章信息 -->
22 <update id="updateArticle" parameterType="Article" >
23 UPDATE t_article
24 <set>
25 <if test="title !=null and title !=''">
26 title=#{title},
27 </if>
28 <if test="content !=null and content !=''">
29 content=#{content}
30 </if>
31 </set>
32 WHERE id=#{id}
33 </update>
34 </mapper>
文件2中,<mapper>标签的namespace属性值对应的是ArticleMapper接口文件的全路径名称,在映射文件中根据ArticleMapper接口文件中的方法,编写两个对应的SQL语句;同时配置数据类型映射时,没有使用类的全路径名称,而是使用了类的别名(例如,没有使用com.itheima.domain.Article而是使用了Article)。
需要说明的是,这里只是演示了使用配置文件方式整合MyBatis的使用,关于MyBatis映射文件中SQL语句的具体语法,可以自行查阅MyBatis官方文档说明。
(3)配置XML映射文件路径。在项目中编写的XML映射文件,Spring Boot并无从知晓,所以无法扫描到该自定义编写的XML配置文件,还必须在全局配置文件application.properties中添加MyBatis映射文件路径的配置,同时需要添加实体类别名映射路径,示例代码如下。
#配置MyBatis的xml配置文件路径
mybatis.mapper-locations=classpath:mapper/*.xml
#配置XML映射文件中指定的实体类别名路径
mybatis.type-aliases-package=com.itheima.domain
上述代码中,在使用配置文件方式整合MyBatis时,MyBatis映射文件路径的配置必不可少;而实体类别名映射路径的配置是根据前面创建的XML映射文件别名使用情况来确定的,如果XML映射文件中使用的都是类的全路径名称,则不需要该配置项。
(4)编写单元测试进行接口方法测试。打开项目的测试类Chapter03ApplicationTests,在该测试类中引入ArticleMapper接口,并对接口方法进行测试,示例代码如下。
@Autowired
private ArticleMapper articleMapper;
@Test
public void selectArticle() {
Article article = articleMapper.selectArticle(1);
System.out.println(article);
}
上述代码中,通过注入的ArticleMapper接口实例对象调用了查询文章详情的getArticle()方法,并对结果进行输出打印。
(5)整合测试。选择测试类中的selectArticle()方法进行效果演示说明,此处为了方便查看结果,选择使用Debug的方式执行单元测试,效果如图1所示。
图1 selectArticle()方法执行结果
从图1可以看出,selectArticle()方法执行成功,查询出了文章id为1的文章详情,并关联查询出了对应的评论信息,这说明使用配置文件的方式整合MyBatis成功。
对于Spring Boot支持与MyBatis整合的两种方式而言,使用注解的方式相比较适合简单的增删改查操作;而使用配置文件的方式稍微麻烦,但对于复杂的数据操作却显得比较实用。实际开发中,使用Spring Boot整合MyBatis进行项目开发时,通常会混合使用两种整合方式。