知识的价值不在于占有,而在于使用。这篇文章主要讲述SpringBoot整合Mybatis进行单元测试mapper和xml路径不一致出现的诡异问题相关的知识,希望能为你提供帮助。
最近在做一个项目,采用SpringBoot整合MybatisPlus开发,由于mapper.xml文件和mapper路径地址不一致,导致做单元测试报异常
文章图片
application.yml配置如下:
文章图片
写了个单元测试的代码:
文章图片
@RunWith(SpringRunner.class) @SpringBootTest(classes = CTScmApplication.class) public class ServiceTest {@Resource private BuyerMapper buyerMapper; @Test public void test() { System.out.println("test =" + buyerMapper.selectSum()); } }
配置没有问题,但运行单元测试却抛了异常信息:
文章图片
其实XML是有配置 selectSum 方法的,不做单元测试,在项目里其实是可以正常执行的。
文章图片
不得已,debug源码才发现,Mybatis启动后会加载mapper.xml配置文件中的SQL放入一个方法MAP,然后根据mapper的方法名作为 statementId (这个应该很熟悉了,就是xml里配置的id,这里是 selectSum) 去方法MAP里取SQL,这里抛异常其实就是在方法MAP里没有get出来。
文章图片
最后发现application.yml文件中的加载mapper.xml配置文件的路径由
classpath:/com/ihanchen/*/mapper/xml/*.xml
修改为classpath*:/com/ihanchen/*/mapper/xml/*.xml
就可以运行成功,应该是mapper xml文件没有放到测试类路径下,而是放在项目类路径下,测试类路径扫描不到项目类路径下的文件则会导致报异常。
classpath只会扫描当前项目中的路径,而classpath*会扫描当前类路径和依赖的jar包等的类路径,个人猜测classpath*也会扫描target目录下所有的类路径。
【SpringBoot整合Mybatis进行单元测试mapper和xml路径不一致出现的诡异问题】
推荐阅读
- 都2020年了Android开发者,别再忽视LeakCanary了
- react-native app 屏幕适配方案(按照设计稿像素大小写就行)
- SSM整合-Spring里面applicationContext.xml文件能不能改成其他文件名()
- 初探RT1061 flash remapping功能的使用
- LeetCode T202.Happy Number/寻找快乐数
- 18P 滑稽脸动态gif表情包大全_微信
- 川普与希拉里美国大选唱情歌表情包分享_微信
- 川普与希拉里表情包对决大全_微信
- 川普带字搞笑表情包大全_微信