欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

[email protected]使用报错:Mapped Statements collection does not contain value for XXX

程序员文章站 2022-07-15 12:21:37
...

一、报错信息


### Error querying database.  Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for xxx.AmsAlgorithmDao.queryAlgorithmById
### The error may exist in xxx/JmsJobDao.java (best guess)
### The error may involve xxx.JmsJobDao.queryWaitToExecute
### The error occurred while handling results
### SQL: select * from xxx where xxx=xxx
### Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for xxx.AmsAlgorithmDao.queryAlgorithmById

二、常见原因分析

1.mybatis的映射文件的命令空间与接口的全限定名不一致;

2有可能mybatis的映射文件名字与接口的类名字不一致;

3.还有一种情况就是接口声明的方法在映射文件里面没有。

以上内容来自参考文章[1],致使这部分出错的常见原因是因为书写出错导致异常,正常情况下不需要百度,自行检查代码编写即可解决

三、本次错误分析

1.背景

1)使用mbg自动生成mapper.xml与使用@select相关的注解一起使用

2)单个@select使用没有问题

3)@Result按常规使用报错

4)使用@MapperScan扫描mapper.xml与接口组件dao

2.原因

因为使用mbg自动生成并且使用混合方式,在@MapperScan扫描时,先扫描Mapper.xml导致@Result使用时会先使用默认的BaseResultMap找不到@Result定位的方法导致出错

具体问题知识应见Mybatis的命名空间的使用以及定位知识

相似问题参考文章[2]

3.解决方法

在@MapperScan扫描时先扫描组件dao所在的包再扫描mapper.xml的相关目录即可

四、参考文章

[1] Mapped Statements collection does not contain value for 解决方法

https://blog.csdn.net/weimezilie/article/details/51940546

[2] Mybatis绑定多个mapper,@ResultMap 报错

https://www.jianshu.com/p/c5785aa3f516

[3] @Result等注解标签使用方式

https://mybatis.org/mybatis-3/zh/java-api.html#sqlSessions