从源码角度解决mybatis报错org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

看了网上很多解决方法发现并不全,大部分都是检查namespace和标签id是否正确以及是否和方法名对应。首先要说一下报错中的这个statement 就是mappedstatement,在mybatis中一个mappedstatement对应一个或者是其他标签,是一对一的关系。如果检查了namespace和xml配置发现都没问题,就可以怀疑是自己的mapper文件并没有被扫描到。下面是我的排错思路:
在这里插入图片描述
实际上这两个都是正确的。但还是会报异常:
在这里插入图片描述
========================================================================分割线

很多人可能会遇到我这种情况,明明namespace和id都对的上,就是找不到错在哪?别着急,我们从源码来看:首先要知道mybatis的所有执行操作都交给了sqlsession,那么我们可以看一下sqlsession执行的时候是否找到了对应的statement(namespace+selectId)
在这里插入图片描述

按照上面的思路,我们可以尝试看看这个configuration.getMappedStatement方法能否获取到我们的mapper。我试了一下发现并没有,返回换个方法查看所有的mapper,并不存在相关或类似的。说明我们的mapper文件压根就没有被扫描到,导致我们自定义的mapperStatement匹配不上。
在这里插入图片描述
到这里应该知道大概原因了,就是mapper.xml没有被扫描到。于是到配置文件中加上扫描路径匹配就好了在这里插入图片描述

如果出现mapper绑定失败,且namespace和id都没错。可以检查一下configuration中匹配mapper文件的方式,比如classPath,resource等方式。

当然,打断点进源码查看才是最简单最快捷的方式

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值