1. 程式人生 > >關於mybatis啟動報Result Maps collection already contains value for ...的問題總結

關於mybatis啟動報Result Maps collection already contains value for ...的問題總結

今天在用mybatis逆向工程生成程式碼後,啟動專案測試時候出現了這個錯誤。關於這個錯誤的原因,各有不同。查了很長時間,下面就這個問題列舉了一些可能出錯的地方。

1、當同一個xml對映檔案記憶體在兩個相同的id(即兩個sql語句的id相同)時會報此錯

解決:查詢sql語句的id值修改

2、在mybatis的配置檔案mybatis.xml內使用了<mapper/>標籤載入xxxMapper.xml的對映檔案報錯,因為如果xxxMapper.xml與namespace的介面在同一路徑下,就不需要在mybaits.xml中再進行配置了。

解決:將mybatis檔案中<mapper/>標籤中的內容刪除

3、parameterType中的問題。這裡的類名如果找不到也會報這個錯,比如你之前是將該類名寫死在這裡,之後由於重構將該類轉移到其他包中,如果這裡不修改也會報這個錯

解決:檢查。。

4、還是parameterType中的問題,這次是關於自定義類的,當你使用基本型別的時候,比如int、string等,千萬不要寫錯,比如寫成strnig,咋一看看不出來,結果該問題就很難找

解決:檢查。。

5、resultType的值與resultMap的id值相同的話會報錯,可能是衝突了

解決:修改resultMap的id屬性,因為resultType的值即為bean類別名或者全路徑名

6、這一點和上一點差不多,如果是自定義resultMap,如果返回型別寫成resultType,也會報這個錯(今天就載在這。)

解決:將返回型別改為resultMap,且不要出現第5點的問題

7. 配置的時候generatorConfig.xml(我的逆向工程配置檔名),裡面的schema沒有指定,如果沒有指定的話,本地存在多個相同名字的表的話,逆向工程會自己去找名字叫t_user的這張表,也就可能導致生成了錯誤的bean。然後就會產生上面的問題。一定不要忘了指定。 我本地有三張叫t_user的表,忘了指定schema,就生成了錯誤的bean。

<table schema="ssmteam"

  tableName="t_user"  domainObjectName="User"> </table>