最近的web項目當中遇到自己自定義的xml文件,但是在啟動的時候報錯。找了半天的原因也不知道在哪里。
報的錯誤如下:
Caused by: org.apache.ibatis.builder.BuilderException
: Error parsing Mapper XML. Cause: java.lang.IllegalArgumentException: Result Maps collection already contains value for com.huifu.uttm.dal.repository.UttTransLogRepository.BaseResultMap
at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:120)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.parse(XMLMapperBuilder.java:92)
at org.mybatis.spring.SqlSessionFactoryBean.buildSqlSessionFactory(SqlSessionFactoryBean.java:521)
... 90 common frames omitted
Caused by: java.lang.IllegalArgumentException : Result Maps collection already contains value for com.huifu.uttm.dal.repository.UttTransLogRepository.BaseResultMap
at org.apache.ibatis.session.Configuration$StrictMap.put(Configuration.java:859)
at org.apache.ibatis.session.Configuration$StrictMap.put(Configuration.java:831)
at org.apache.ibatis.session.Configuration.addResultMap(Configuration.java:613)
at org.apache.ibatis.builder.MapperBuilderAssistant.addResultMap(MapperBuilderAssistant.java:214)
at org.apache.ibatis.builder.ResultMapResolver.resolve(ResultMapResolver.java:47)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElement(XMLMapperBuilder.java:285)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElement(XMLMapperBuilder.java:252)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElements(XMLMapperBuilder.java:244)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:116)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:120)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.parse(XMLMapperBuilder.java:92)
at org.mybatis.spring.SqlSessionFactoryBean.buildSqlSessionFactory(SqlSessionFactoryBean.java:521)
... 90 common frames omitted
Caused by: java.lang.IllegalArgumentException : Result Maps collection already contains value for com.huifu.uttm.dal.repository.UttTransLogRepository.BaseResultMap
at org.apache.ibatis.session.Configuration$StrictMap.put(Configuration.java:859)
at org.apache.ibatis.session.Configuration$StrictMap.put(Configuration.java:831)
at org.apache.ibatis.session.Configuration.addResultMap(Configuration.java:613)
at org.apache.ibatis.builder.MapperBuilderAssistant.addResultMap(MapperBuilderAssistant.java:214)
at org.apache.ibatis.builder.ResultMapResolver.resolve(ResultMapResolver.java:47)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElement(XMLMapperBuilder.java:285)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElement(XMLMapperBuilder.java:252)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElements(XMLMapperBuilder.java:244)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:116)
從上面的錯誤可以看出很明顯是xml文件當中出錯了,然后就找錯誤,但是一直找不到。檢查了好多遍。
最后想起來來原因了,因為之前在提交這個文件到SVN的時候沖突,重新備份了一份,然后拿進來改了一個名字,放進來然后就把相關不沖突的代碼copy進來。
然后項目在啟動的時候就報錯。截圖如下:

圖片中這兩個xml文件當中的BaseResultMap當中指定的類是同一個,所以導致出錯了。最后百度了一下才發現我們sprig-boot在啟動的時候會去加載文件識別這個BaseResultMap
然后發現有兩個BaseResultMap然后就提示報錯了。這才是正真的原因。