学科分类
目录
Spring Boot开发

使用配置文件的方式整合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进行项目开发时,通常会混合使用两种整合方式。

点击此处
隐藏目录