转载地址:https://www.cnblogs.com/yucongblog/p/7550590.html

背景:SSM+Maven+Linux+zookeeper

报错:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

解释:就是说,你的Mapper接口,被Spring注入后,却无法正常的使用mapper.xml的sql;

       这里的Spring注入后的意思是,你的接口已经成功的被扫描到,但是当Spring尝试注入一个代理(MyBatista实现)的实现类后,却无法正常使用。这里的可能发生的情况有如下几种;

  1. 接口已经被扫描到,但是代理对象没有找到,即使尝试注入,也是注入一个错误的对象(可能就是null)
  2. 接口已经被扫描到,代理对象找到了,也注入到接口上了,但是调用某个具体方法时,却无法使用(可能别的方法是正常的)

当然,我们不好说是那种情况,毕竟报错的结果是一样的,这里就提供几种排查方法:

  1. mapper接口和mapper.xml是否在同一个包(package)下?名字是否一样(仅后缀不同)?
    [plain]  view plain  copy
     
    1. 比如,接口名是NameMapper.java;对应的xml就应该是NameMapper.xml  
  2. mapper.xml的命名空间(namespace)是否跟mapper接口的包名一致?
    [plain]  view plain  copy
     
    1. 比如,你接口的包名是com.abc.dao,接口名是NameMapper.java,那么你的mapper.xml的namespace应该是com.abc.dao.NameMapper  
  3. 接口的方法名,与xml中的一条sql标签的id一致
    [html]  view plain  copy
     
    1. 比如,接口的方法List<User> findAll();那么,对应的xml里面一定有一条是<select id="findAll" resultMap="**">****</select>  
  4. 如果接口中的返回值List集合(不知道其他集合也是),那么xml里面的配置,尽量用resultMap(保证resultMap配置正确),不要用resultType
  5. 最后,如果你的项目是maven项目,请你在编译后,到接口所在目录看一看,很有可能是没有生产对应的xml文件,因为maven默认是不编译的,因此,你需要在你的pom.xml的<build></build>里面,加这么一段:
    [html]  view plain  copy
     
    1. <resources>  
    2.     <resource>  
    3.         <directory>src/main/java</directory>  
    4.         <includes>  
    5.             <include>**/*.xml</include>  
    6.         </includes>  
    7.         <filtering>true</filtering>  
    8.     </resource>  
    9. </resources>  
现在是2018年5月26日20:56:05,同样又犯了这个错误,根据笔记追溯到这里,再次补充! 需要注意的是,如果出除了这个目录以为还有其它目录里面有配置文件的话,那么一定要再次配置一个resource节点, 因为添加了这个会改变mybatis的默认行为,它会认为所有的配置文件都在那个文件夹下面所以,需要再次配置一个resource节点,把其它存在配置文件的路径也配置进去




GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐