前几天在整合ssm遇到的一个头疼很多天的问题
在用mybatis逆向工程生成mapper完成之后,加之自己对生成的mapper改进了一些自己需要的sql方法,准备做一个单元测试
用的是注解的方式从ioc容器获取一个departmentMapper的对象,当Run这个方法的时候,报了下面的错误
仔细看一下这个图片,Failed to load ApplicationContext,所以问题肯定出现在我的spring配置文件里面。
在网上查了很多方法,但是都没解决我的问题,这个报错卡了一天,起初以为是开发工具的问题,idea换到了myeclipse,但是还是报这个错误。又在网上找了很多,最后终于发现,在用mybatis逆向工程生成mapper文件的时候,在spring配置文件里面加了一句
<property name="mapperLocations" value="classpath:mapper/*.xml"></property>
用来指定mapper文件生成的位置的,当进行这个单元测试的时候,mapper文件已经生成了,这个时候再次去Run的时候,这个地方就会再被扫一遍,所以就报了上面的错误。
具体原因我也不清楚,可能是因为mybatis逆向工程 检测到这个就会在生成一遍?所以当mapper文件已经存在的时候,就会报错。
所以只需要把
<property name="mapperLocations" value="classpath:mapper/*.xml"></property>
注释掉就可以运行测试了。网上也有小伙伴说自己用的junit5就没遇到这个问题(因为我用的是junit4)。所以希望这个方法对遇到这个问题的小伙伴有帮助。
如果有知道具体原因的大佬,请把链接或者评论发在评论区让我拜读一下,也欢迎大家在评论区讨论。