MyBatis绑定错误:Invalid bound statement (not found)

摘要: 若出现: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 一样平常的缘由是Mapper interface战xml文件的界说对应没有上,须要检讨包名,namespace,函数称号等可否对应上,除此之外还应查看target目录下xml是否构建。

 

今天搭建SpringBoot+mybatis maven项目,总是出现 

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)错误,调试了好久都没解决问题,新手的心酸也只有新手才能体会了。最后我去target目录下看了下,发现自己写的mapper.xml,原来maven项目的约定配置文件必须放resources里,src目录下的xml文件默认不会编译到target。由于我把mapper.xml放在了src目录里,才导致了错误的发生,该问题的实质是,idea对classpath的规定。在eclipse中,把资源文件放在src文件夹下,是可以找到的;但是在idea中,直接把资源文件放在src文件夹下,如果不进行设置,是不能被找到的。

MyBatis绑定错误:Invalid bound statement (not found)_第1张图片 

原来Maven 为我们提供了一致的项目目录配置(源文件夹、资源文件夹等),在自动构建项目时, Maven 会按照这个配置来执行操作(编译源文件、拷贝资源文件),Maven 默认的源文件夹及资源文件夹的配置代码如下:

  
   src/main/java  
   src/test/java  
     
         
          src/main/resources  
         
     
     
         
          src/test/resources  
         
     

解决方案有2种:

1、可以把xml文件放到resource目录下,这样项目构建的时候会加载到target。

2、在pom.xml文件build添加resource资源列表。



    
        
        src/main/java
        
            **/*.xml
        
    

总结

如果出现org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)错误,一般的原因是Mapper interface和xml文件的定义对应不上,需要检查包名,namespace,函数名称等能否对应上,需要比较细致的对比,按以下步骤一一执行:

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

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

3、检查函数名称能否对应上

4、去掉xml文件中的中文注释

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

除此之外,我遇到的还有一些特殊情况,耽误了我不少时间,网上有其他原因也导致bound找不到:

1、Intellij Idea 的包名和目录名生成机制,新建一个包a.b.c.d,目录结构不是a->b->c->d,而是生成"a.b.c.d"的目录,进而导致mybatis映射错误,此错误很难排查。

2、xml文件定义如下: