杂记随笔系列:报错:org.apache.ibatis.binding.BindingException

导读:本篇文章讲解 杂记随笔系列:报错:org.apache.ibatis.binding.BindingException,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

这个问题整整纠结了我好久,心好累啊。。。不废话。。。


背景:Spring整合Mybatis

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

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

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

接口已经被扫描到,但是代理对象没有找到,即使尝试注入,也是注入一个错误的对象(可能就是null)

接口已经被扫描到,代理对象找到了,也注入到接口上了,但是调用某个具体方法时,却无法使用(可能别的方法是正常的)

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

mapper接口和mapper.xml是否在同一个包(package)下?名字是否一样(仅后缀不同)?

- 比如,接口名是NameMapper.java;对应的xml就应该是NameMapper.xml  
mapper.xml的命名空间(namespace)是否跟mapper接口的包名一致?

- 比如,你接口的包名是com.abc.dao,接口名是NameMapper.java,那么你的mapper.xml的namespace应该是com.abc.dao.NameMapper  
接口的方法名,与xml中的一条sql标签的id一致

- 比如,接口的方法List<User> findAll();那么,对应的xml里面一定有一条是<select id="findAll" resultMap="**">****</select>  
如果接口中的返回值List集合(不知道其他集合也是),那么xml里面的配置,尽量用resultMap(保证resultMap配置正确),不要用resultType
最后,如果你的项目是maven项目,请你在编译后,到接口所在目录看一看,很有可能是没有生产对应的xml文件,因为maven默认是不编译的,因此,你需要在你的pom.xml的<build></build>里面,加这么一段:

[html] view plain copy
 
<resources>  
    <resource>  
        <directory>src/main/java</directory>  
        <includes>  
            <include>**/*.xml</include>  
        </includes>  
        <filtering>true</filtering>  
    </resource>  
</resources>  

到这里报错:org.apache.ibatis.binding.BindingException,分享完毕了!下一波将分享《Redis的下载安装》和SpringBoot-Jpa-Redis案例分享!


最后

  • 更多参考精彩博文请看这里:《陈永佳的博客》

  • 喜欢博主的小伙伴可以加个关注、点个赞哦,持续更新嘿嘿!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/97872.html

(0)
小半的头像小半

相关推荐

极客之家——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!