當(dāng)Mybatis報錯 Result Maps collection already contains value for的時候,有哪些原因呢?
一、Mybatis-Generator根據(jù)配置文件生成XML的鍋
Mybatis-Generator生成xml等又快有方便,但是如果同名xml之前已經(jīng)存在,那么生成的時候會在xml里面在之前的代碼后面繼續(xù)追加,而不會覆蓋同名的語句。因此有可能報這個錯誤
解決方案
如果是再次生成代碼,必須先將已經(jīng)生成的代碼刪除,仔細(xì)檢查一下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。這樣相當(dāng)于mapper的配置被配置了兩遍。
解決方案
把mybatis-config.xml中的mappers部分刪除
四、應(yīng)該用resultMap來接收返回值,卻用了resultType
解決方案
1.當(dāng)返回值為List<XXX>泛型時,使用resultType = "XXX" 的類型
2.當(dāng)XXX 是PO類,且映射不完全,即表中operate_time,po中對應(yīng)的映射字段為operateTime
? 使用resultMap