MyBatis - Mapped Statements collection already contains value for...

Mybatis開發過程中經常遇到Mapped Statements collection already contains value for xxx 這種錯誤。字面意思是說mapper中存在id重複的值,比如說同一個xml文件中有兩個id爲xxx的方法。這種經常是copy已有代碼的時候忘了改id導致的。不過,mybatis出現這種錯誤時,可能實際重複的id並不是它報出來的那個,碰到這種問題就比較糾結了。

 

下面我把自己碰到過的兩種情況和大家分享,兩種情況報錯信息都爲:

java.lang.RuntimeException: Error parsing Mapper XML. Cause: java.lang.IllegalArgumentException: Mapped Statements collection already contains value for xxx...

 

情況1

就是方法id重複了,但不一定是xxx重複,而有可能是yyy。所以最好是把新舊代碼做個diff,看看都加了哪些方法,逐個去排查。

 

情況2

方法參數寫錯了或者沒寫。比如resultType="UserVO"寫成了resultType="User"。這種情況一般是最近刪除了什麼bean或者重命名了什麼bean而xml對應的參數類型沒有修改而導致的。同樣的,mybatis並不一定能準確地指出是哪個方法錯誤,需要逐個排查,最好是好好回憶一下自己動了哪些bean,纔好快速定位。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章