request.js?b775:101 Uncaught (in promise) Error: Invalid bound statement (not found): com.ruoyi.sysparm.mapper.TbDictTypeMapper.updateTbDictType at _default (request.js?b775:101:1)
报错信息:
request.js?b775:101 Uncaught (in promise) Error: Invalid bound statement (not found): com.ruoyi.sysparm.mapper.TbDictTypeMapper.updateTbDictType at _default (request.js?b775:101:1)
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的文件夹。真是大坑啊,于是删除重新在文件夹中创建(!!!不要再项目上直接建),,启动,搞定。。。
原文链接:https://blog.csdn.net/hexz0407/article/details/122270218
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?