刚开始学习的童鞋经常会遇到这样的题:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):
出现这个问题的原因一般是:
Mapper interface和xml文件的定义对应不上(需要检查包名,namespace)
函数名称等能否对应不上(需要比较细致的对比,经常就写错了一两个字母搞的很长时间找不到错误)
解决的思路一般是:
检查xml文件所在的package名称是否和interface对应的package名称一一对应
检查xml文件的namespace是否和xml文件的package名称一一对应
检查函数名称能否对应上
去掉xml文件中的中文注释
随意在xml文件中加一个空格或者空行然后保存
以上的内容都特别容易手误写错,不过可以通过一款非常棒的插件避免以上的问题:Free Mybatis plugin
使用该插件后,点击在mapper文件中的namespace的类名,如果能点进去,则说明 namespace和interface的package名称是没问题的:
点击mapper文件中的这个绿色小箭头,如果能点到interface中的方法,则说明函数名称对应上了:
另一个场景就比较厉害了,😂😂😂😂,可能有些同学根据以上的几点,认真检查了好几遍,依然报错,要抓狂了....
此时,一般就是xml文件的编译问题。
编译前的文件:
编译后的文件:
阿西吧,终于找到问题,的确是没有将xml文件编译进去,那怎样解决呢?
解决方式一:把*Mapper.xml文件放到resource文件夹下管理
解决方式二:在pom.xml中的build的标签中加入以下内容:
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
至此,该问题完美解决。撒花,🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹