XML fragments parsed from previous mappers already contains value for XXX
异常信息例子
Caused by: java.lang.IllegalArgumentException: XML fragments parsed from previous mappers already contains value for com.alioth.....
at org.apache.ibatis.session.Configuration$StrictMap.put(Configuration.java:872)
at org.apache.ibatis.session.Configuration$StrictMap.put(Configuration.java:844)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.sqlElement(XMLMapperBuilder.java:335)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.sqlElement(XMLMapperBuilder.java:326)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:117)
... 129 common frames omitted
解决问题步骤
1、查看对应的Mapper文件中是否存在相同ID的SQL标签
2、查看同一包下,是否有多个xml配置了相同的namespace
问题原因
在mybatis中,相同的namespace下不允许sql标签的ID重复,如果重复,就会报题目中的异常。通常情况下,由于代码搬运(复制粘贴)会造成同一个mapper文件内出现两个ID相同的sql标签,或者两个mapper文件的namespace同时指向了同一个java bean。
注:极特殊情况下,由于编译器的问题,比如eclipse/idea未正确编译代码也有可能出现此问题,使用build重新编译即可。如果使用maven管理项目,可以重新clean install 解决。