mybatis.mapper-locations加载不到xml文件问题(classpath及classpath*区别)

【饿了么、美团】外卖红包领取地址 >> 能省一点是一点

在使用mybatis的时候,发现了一个诡异的问题,调用dao层方法时一直报异常

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.example.dao.UserDao.select

异常解释为:mybatis找不到UserDao中select方法对应的sql文件

经过测试,发现所有dao的所有方法都是这个异常,由此判定应该是xml文件加载有问题。继续排查,发现项目src/main目录下有2个文件夹,一个是java文件夹,一个是resources文件夹。而恰好:
项目的dao接口放在java文件夹下的com/example/dao/目录。
对应的xml文件放在resources文件夹下的com/example/目录。

此时对应的mybatis.mapper-locations配置为:

mybatis.mapper-locations = classpath:com/example/*.xml

本意是想加载resources目录下的com/example/下的所有xml文件,但是由于java和resources目录都有com/example目录,而上述配置在有相同目录的情况下,默认扫描的是java目录下的文件,从而导致xml文件加载不到。

解决办法:
1、修改xml位置,避免上述情况发生
2、修改mybatis.mapper-locations配置,使用classpath*

mybatis.mapper-locations = classpath*:com/example/*.xml

classpath各种写法及区别:
1、classpath:xxx 和 classpath:/xxx 是一样的
2、classpath:xxx 和 classpath*:xxx 是不一样的,前者表示引入一个,后者表示引入多个。

当项目中有多个classpath路径时,如果不加*则表示仅加载第一个classpath路径,加了*则加载所有(包含jar包中的)


觉得内容还不错?打赏个钢镚鼓励鼓励!!👍

马可(MARCO)JQ24-04 24节气主题彩铅美术设计手绘创意手册 春季篇(立春-谷雨)
¥17.10
上德(D&C)上海德力西开关有限公司插座面板86型漏电保护三孔插座热水器保护器空调大功率插座 10A白色明装带底盒
¥36.80
北京同仁堂 维生素B族片 维生素b1b2b6b12 儿童成人男女补vb维b复合维生素 多种维生素片 【0.5g*60片】*1瓶
¥39.00
小确幸 喷枪打火机防风充气体焊枪点火器直冲蓝焰点雪茄艾灸蚊香户外烧烤专用喷火枪 单冲银黑
¥27.50
富光玻璃杯 单层大容量玻璃杯子 带提环便携男女玻璃水杯 车载透明茶杯 单层600ML深海蓝
¥35.00
收纳博士免抽真空压缩袋棉被特大号收纳袋整理袋衣服被子加厚家用神器袋子 免抽气7中
¥39.90
漫德莱 树木支撑架固定器小号3套杯直径3.6cm+ 50cm绑带(5套装)绿化工程景观支撑架固定器塑料套杯扎绑带
¥43.91
植物大战僵尸2武器秘密之妙语连珠成语漫画22(2022年版)
¥36.80