mybatis參數類型不匹配錯誤argument type mismatch的處理方案
參數類型不匹配錯誤argument type mismatch
錯誤日志
java.lang.RuntimeException: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.ExecutorException: Error selecting key or setting result to parameter object. Cause: org.apache.ibatis.reflection.ReflectionException: Could not set property ‘id’ of ‘class xxxxxxxx’ with value ‘37997’ Cause: java.lang.IllegalArgumentException: argument type mismatch
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.ExecutorException: Error selecting key or setting result to parameter object. Cause: org.apache.ibatis.reflection.ReflectionException: Could not set property ‘id’ of ‘class com.fshows.lifecircle.marketcore.service.dal.lifecircle.dataobject.TpLifecircleQuotaDO’ with value ‘37997’ Cause: java.lang.IllegalArgumentException: argument type mismatch
錯誤描述
根據字面意思就是:參數類型不匹配
實際就是某個參數存儲的,與傳入的參數類型不一致
錯誤代碼
錯誤原因
在mybatis:gen生成代碼的時候,這個id參數生成類型resultType=“java.lang.Long”,但實際數據庫類型是int,應該對應resultType=“java.lang.Integer”
隻要將Long改為Integer,與數據庫對應即可。
mybatis時argument type mismatch的坑
錯誤描述:參數類型不匹配
常見錯誤中 mybatis映射出現問題無非就
column名字錯誤、property字段名錯誤、resultMap id寫錯瞭 沒對上、映射實體類屬性類型和數據庫字段類型對不上,
這個一般都是比較容易想到和發現的。
但是某一天 映射實體類 因為某些地方要數據處理,你寫瞭一個有參構造,而沒把無參構造補上,這時mybatis在映射的時候 (映射首先要創建對象) 就會出現異常,而此時的參數類型不匹配 正是指的構造參數類型不匹配 而非數據字段和屬性不匹配!
例如
new PeopleVO(People p) 和 new People() debug下可以看到會報錯參數People類型錯誤
所以在開發中 該遵循的規則 還是要遵循,相信不少人在初學java的時候 一定聽過 寫瞭有參構造一定要手動把無參構造寫上,當時我想的是 要是用上無參構造new對象 編譯器也會提示,用的時候在new也不遲 況且還不一定用得上,
可是在mybatis映射的時候 想不到吧 人傢反射創建對象瞭… 不由感慨 前人的總結都是踩瞭無數坑的基礎上建立起來的,那些表面看起來不會有問題的代碼 可能會以某種意想不到的形式出現bug
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- mybatis相同的sql查詢第二次查不出結果問題
- Mybatis-Plus自動生成的數據庫id過長的解決
- @insert mybatis踩坑記錄,實體接收前端傳遞的參數
- MyBatis查詢無記錄時的返回值問題
- mybatis Mapper的xml文件中resultType值的使用說明