码迷,mamicode.com
首页 > 移动开发 > 详细

SpringBoot整合Mybatis进行单元测试mapper和xml路径不一致出现的诡异问题

时间:2020-04-29 12:34:09      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:col   print   sum   个人   配置   sys   yml   span   bat   

最近在做一个项目,采用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路径不一致出现的诡异问题

标签:col   print   sum   个人   配置   sys   yml   span   bat   

原文地址:https://www.cnblogs.com/gaopengpy/p/12800996.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!