當Mybatis報錯 Result Maps collection already contains value for的時候秘案,有哪些原因呢蚕脏?
一、Mybatis-Generator根據(jù)配置文件生成XML的鍋
Mybatis-Generator生成xml等又快有方便,但是如果同名xml之前已經(jīng)存在糟把,那么生成的時候會在xml里面在之前的代碼后面繼續(xù)追加亩钟,而不會覆蓋同名的語句乓梨。因此有可能報這個錯誤
解決方案
如果是再次生成代碼,必須先將已經(jīng)生成的代碼刪除清酥,仔細檢查一下xml文件看是否存在兩個id為BaseResultMap的resultMap扶镀,刪除多余的,只保留一個就可以解決問題焰轻。
二臭觉、同一個mapper.xml文件中沒有id相同的resultMap,但是存在多個相同名稱的xml文件辱志,這些xml文件都能被掃描到胧谈,而且不同的xml文件中包含相同id的resultMap
解決方案
刪除測試文件夾下的resources目錄下的與mapper.xml同名的xml文件,或是修改測試文件夾中xml文件中的resultMap的id荸频,確保同名的xml中沒有相同id的resultMap菱肖。
三、spring boot + mybatis
在spring boot的application.properties中旭从,配置了mybatis.config-location=classpath:mybatis-config.xml mybatis.mapper-locations=classpath*:mapper/*.xml稳强。這樣相當于mapper的配置被配置了兩遍场仲。
解決方案
把mybatis-config.xml中的mappers部分刪除
四、應(yīng)該用resultMap來接收返回值退疫,卻用了resultType
解決方案
1.當返回值為List<XXX>泛型時渠缕,使用resultType = "XXX" 的類型
2.當XXX 是PO類,且映射不完全褒繁,即表中operate_time,po中對應(yīng)的映射字段為operateTime
? 使用resultMap