目录
2.3 AntPathMatcher,spring默认的路径匹配器
前言
本文主要内容是分享springboot集成mybatis时,配置mapper的xml文件目录路径问题思路和源码分析过程,想要直接看解决方案的老铁们请跳转 三、解决
一、背景
最近在新项目中在用springboot结合mybatis,一开始采取全注解模式,即,sql语句也写到接口注解上。后来,考虑到复杂sql语句在注解上编写的可读性和可维护性,决定将sql语句转移到mybatis常用的xml映射器上。
原mapper接口写法如下:
@Mapper
public interface AuditBillVMapper {
@Select("select t.* from audit_bill_v t where t.task_user_no=#{userNo}")
List<AuditBillV> getByTaskUserNo(String userNo);
}
加入sql映射器xml文件后写法如下:
AuditBillVMapper.class
@Mapper
public interface AuditBillVMapper {
List<AuditBillV> getByTaskUserNo(String userNo);
}
AuditBillVMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.demo.core.mapper.instance.AuditBillVMapper">
<select id="getByTaskUserNo" resultType="com.demo.core.domain.instance.AuditBillV">
select t.* from audit_bill_v t where t.task_user_no=#{userNo}
</select>
</mapper>
然而,在xml到mapper接口的映射上遇到了问题:sql语句映射器的xml文件跟mapper接口class怎么文件对应呢?mybatis官方文档有关于mybatis找到这些xml映射器的xml配置,例如(省略其他配置):
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<mappers>
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
但是问题来了:
1.作为一个基于springboot的项目,这些xml配置文件无法忍受;
2.每次添加sql映射xml文件时,都需要在这个mybatis-config.xml添加xml文件资源路径,不易于维护。
有关mybatis的介绍和入门这里就不阐述了,官方有较为详细的中文文档。链接:mybatis入门
二、排查过程
2.1 Springboot的自动配置
一个基于springboot框架的项目,首先想到的当然是自动配置。显然springboot对于mybatis也是有自动配置的,然后我找到了自动配置类:
每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的(不了解可跳转:mybatis入门)。因而我在MybatisAutoConfiguration.class中找到这个方法sqlSessionFactory:
@Bean
@ConditionalOnMissingBean
publ