您好,登錄后才能下訂單哦!
今天小編給大家分享一下Mapper類中存在名稱相同的方法重載報錯怎么解決的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
官網項目開發
Mapper類中存在名稱相同的方法重載報錯
為了省事,直接在mapper層通過@select@update等注解形式寫sql (此時大都是單表查詢沒有創建mapper.xml文件)代碼如下:
@Update("") void updateSortBySort(Integer newSort, Integer platform, Integer classification); @Update("") void updateSortBySort(Integer oldSort, Integer newSort, Integer platform, Integer classification);
此時可以正常使用
接下來因為業務原因,需要進行多表查詢,僅使用mybatis自帶的不行,需要使用mapper.xml文件寫sql腳本,進行多表查詢
@Update("") void updateSortBySort(Integer newSort, Integer platform, Integer classification); @Update("") void updateSortBySort(Integer oldSort, Integer newSort, Integer platform, Integer classification); IPage<List<ProductVo>> getlistPage(IPage<ProductVo> page, @Param("Param1")Integer Param1, @Param("Param2")Integer Param2);
此時調用第一個updateSortBySort方法的接口,會報一個“Parameter ‘oldSort’ not found 就是參數不存在的錯誤”
找到了原因:在使用@Select等注解的情況下,方法名即為mapper的id,id相同。重載的方法會報這個錯
假如項目啟動時候通過反射獲取mapper方法數組順序先是在第一個
此時調用方法,正常,不會有問題;
因為mybatis查找mapper內的方法是靠方法名,和參數無關。方法名就是mapper.xml里面的id一樣
當不進行方法的重載時,即:每個方法都有唯一的命名時,在xml中進行映射后,就可以執行,不會出現異常。
所以mybatis中mapper.xml是不會準確映射到Java中的重載方法的。最好不要在mapper接口中使用方法重載。
方法名必須相同
參數列表必須不同(個數不同、或類型不同、參數排列順序不同等)
方法的返回類型可以相同也可以不相同
僅僅返回類型不同不足以成為方法的重載
重載就是在一個類中,有相同的函數名稱,但形參不同的函數
方法名相同時,編譯器會根據調用方法的參數個數、參數類型等去逐個匹配,以選擇對應的方法,如果匹配失敗,則編譯器報錯
方法名必須相同
參數列表必須相同
修飾符:范圍可以擴大但不能縮小 :public>protect>default>private
重寫:子類的方法和父類必須一致,方法體可以不同。需要有繼承關系,子類重寫父類方法
以上就是“Mapper類中存在名稱相同的方法重載報錯怎么解決”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。