记一次SpringBoot整合MyBatis时找不到Mapper.xml的BUG定位
Posted AlaGeek
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记一次SpringBoot整合MyBatis时找不到Mapper.xml的BUG定位相关的知识,希望对你有一定的参考价值。
1、前因
最近开始写我的博客系统了,想着先把登录注册功能写了,框架采用SpringBoot+SpringSecurity+MyBatis,于是想着先把SpringBoot和MyBatis整合,谁知道,这一整合就整出问题了。
2、BUG定位
首先先给大家复现下我的BUG,下面是我的工程结构:
这个代码是没问题,但是启动项目的时候就报了个错,这个错叫“Invalid bound statement(not found) ”,我百度了下,是说Mapper.xml文件没找到,有人说是因为Mapper.xml文件在java文件夹下,所以没有被识别,于是我在pom文件加了如下代码:
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
</build>
这个代码告诉Maven工程,我在Java文件夹下面有xml文件,你别给我识别漏了,再运行工程,还是报错,但是我一看target文件夹,确实识别到了Mapper.xml文件:
由于没有思路,我打开了之前学习SpringBoot整合MyBatis的工程,将两者进行了对比,发现了一个问题,请看两个工程结构图:
看出来问题没,正确工程的Mapper接口和Mapper.xml文件是在一个包下面的,而报错的工程,我将Mapper.xml单独抽了个包出来,好家伙,强迫症使我写BUG!
对于这个问题,我想应该是这样解释的,框架里应该有种机制,由于我在Mapper接口处写了@Mapper注解,所以框架能够识别到我这个接口,同时能够识别在这个包下的同名xml文件,而由于我的强迫症,框架就找不到Mapper.xml文件了。
3、BUG修复
定位到这个问题后,修复也很简单,我把Mapper.xml从mapper包中移出来,都放在dao包下,程序就正确了,如图:
4、后续
这个修复很简单,但是我就是不想把接口跟xml放在一起呢,也有办法解决,那就是把mapper包放到resources文件夹下去,如图:
同时在配置文件中加上这样一句话:
mybatis.mapper-locations=classpath:mapper/*.xml
告诉Maven工程,我的Mapper.xml文件在resources文件夹下的mapper文件夹里,这样就可以了。
那么有小伙伴可能要问了,我就是要把Mapper.xml文件放在java目录下,就是要单独抽个包出来,那该怎么办呢?很遗憾的是,我也不晓得,我尝试了百度的很多方法,都是找不到文件,不知道是bug还是我太菜了。要是有小伙伴知道,麻烦评论里教教我。
哦对,实在是很想吐槽一句,百度到的博客,十篇里面九篇是一样的,抄袭也太严重了吧,喜欢的博客收藏不就好了,加个书签也行啊,自己写一篇,加点自己的理解也行啊,非要一模一样的,找bug的时候,打开七八个博客,全是一样的东西,真的是要吐血了!!!
以上是关于记一次SpringBoot整合MyBatis时找不到Mapper.xml的BUG定位的主要内容,如果未能解决你的问题,请参考以下文章