mybatis常见异常:Invalid bound statement (not found): com.ruoyi.news.mapper.RuoyiNewsMapper.selectRuoyiNe

Invalid bound statement——无效绑定,应该是mybatis最常见的一个异常了,这个异常不管具体什么原因导致,归根结底,就是mapper接口和xml没有绑定成功。这里先简单回顾一下接口与xml的绑定原理。

首先,mapper接口并没有实现类,所以框架会通过JDK动态代理代理模式获取接口的代理实现类,进而根据接口全限定类名+id去一一绑定xml中的sql。

用debug断点我们看到MappedStatement这个对象为空,而通过源码跟踪,这个对象包含了开发人员编写的SQL语句、参数结构、返回值结构、Mybatis对它的处理方式的配置等细节要素,是对一个SQL命令是什么、执行方式的完整定义。

MappedStatement保存在Configuration#mappedStatements这个Map类型的对象中,其存储的key为MappedStatement#id,所以MappedStatement的id是不能重复的,这个id是由Mapper接口的完全限定名和方法名称拼接而成,这就导致了我们在同一个Mapper中不能出现重载的接口方法。

 也就是说,在绑定过程中,mapper加载成功了,xml加载失败了,所以将问题定位在xml的身上,通过查看target目录发现,mapper接口的层级目录如下:

而xml编译后的目录如下:

可以发现,xml并没有像接口那样按照文件层级编译,而是被当做了一个文件夹名为mapper.news的文件夹处理,问题就出在这里。原来是自己建立文件夹的时候没有分两步建立,而是偷懒直接建了一个mapper.news的文件夹。真是大坑啊,于是删除重新创建,install,启动,搞定。。。

  • 54
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 26
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值