解决问题:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):

字数 505阅读 16

刚开始学习的童鞋经常会遇到这样的题:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):

image.png

出现这个问题的原因一般是:

  • Mapper interface和xml文件的定义对应不上(需要检查包名,namespace)

  • 函数名称等能否对应不上(需要比较细致的对比,经常就写错了一两个字母搞的很长时间找不到错误)

解决的思路一般是:

  • 检查xml文件所在的package名称是否和interface对应的package名称一一对应

  • 检查xml文件的namespace是否和xml文件的package名称一一对应

  • 检查函数名称能否对应上

  • 去掉xml文件中的中文注释

  • 随意在xml文件中加一个空格或者空行然后保存

以上的内容都特别容易手误写错,不过可以通过一款非常棒的插件避免以上的问题:Free Mybatis plugin

使用该插件后,点击在mapper文件中的namespace的类名,如果能点进去,则说明 namespace和interface的package名称是没问题的:

image.png

点击mapper文件中的这个绿色小箭头,如果能点到interface中的方法,则说明函数名称对应上了:

image.png

另一个场景就比较厉害了,😂😂😂😂,可能有些同学根据以上的几点,认真检查了好几遍,依然报错,要抓狂了....

此时,一般就是xml文件的编译问题。

编译前的文件:

image.png

编译后的文件:

image.png

阿西吧,终于找到问题,的确是没有将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>

至此,该问题完美解决。撒花,🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹

推荐阅读更多精彩内容