MyBatis错误:Mapped Statements collection does not contain value 深度分析
最近群里有人贴出一个问题:Mapped Statements collection does not contain value for student.insert
如下图所示:
关于这个错误的分析是这样的:
(1)其实,最令人困惑的是"Mapped Statements collection",它是个map的名字,这个map存放各种xml或者注解中被映射的sql。这个map的key就是id,例如 student.insert。value指的是被映射的sql语句。上述错误的原因是找不到被映射的sql。
(2)Mapped Statements collection指的是map的名字,MyBatis的源码是这样的:
Map<String, MappedStatement> mappedStatements = new StrictMap<MappedStatement>("Mapped Statements collection");
MappedStatement对象对应mapper.xml配置文件中的一个select/update/insert/delete节点,描述的就是一条sql语句。
扩展一下:
Mapped Statements collection 的另外一个问题:Mapped Statements collection already contains value for...
MyBatis开发过程中经常遇到 Mapped Statements collection already contains value for xxx 这种错误,字面意思是说mapper中存在id重复的值,比如说同一个xml文件中有两个id为xxx的方法。这种情况经常是copy已有代码的时候忘了改id导致的。另外,还有可能是方法重载导致的,曾经有个网友就遇到这样的问题:
因为mapper里面出现了重载方法,mybatis规定mapper接口里面不能出现重载方法。
赞