Springboot集成mybatis,解读SQL 映射语句mapper的路径配置的源码

本文深入探讨了在Springboot中集成Mybatis时,关于mapper XML文件路径配置的问题。作者从背景出发,详细介绍了排查过程,包括Springboot的自动配置、Spring获取资源的方式以及AntPathMatcher的路径匹配原理。最终,文章提供了在application.properties中配置mapperLocations的解决方案,以解决SQL映射文件的自动加载和维护问题。
摘要由CSDN通过智能技术生成

目录

前言

一、背景

二、排查过程

2.1 Springboot的自动配置

2.2 Spring获取资源

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值