異常記錄——使用Mybatis報BindingException


異常信息

org.apache.ibatis.binding.BindingException

nested exception is org.apache.ibatis.binding.BindingException: Parameter 'deviceNO' not found. Available parameters are [deviceNo, deviceId, param1, param2]

場景回溯

業務場景:車輛表,需要更新指定編號車輛的設備Id(編號和設備ID均非主鍵),因而在對應的mapper.xml中自定義了SQL語句,結果調用對應接口時爆出異常

當然可以直接使用Mybatis-plus的EntityWrapper,這樣做雖然方便,但是第一影響性能,第二造成職責划分不清(SQL的拼裝屬於dao層,它從來就不該在Service層完成)

原因排查

apache的ibatis將原因說的很清楚:Parameter 'deviceNO' not found. Available parameters are [deviceNo, deviceId, param1, param2] ,沒找到xml里使用占位符表示的參數(#{deviceNO}),能用的參數有deviceNo、deviceId等,很明顯是發生了拼寫錯誤

xml:

Mapper接口:

是一個字母的大小寫引發的錯誤

解決方法

更改參數名使xml和Mapper接口里一致即可

總結與反思

一個字母的大小寫錯誤,不僅僅是引發了BindingException異常,而且它還暴露了我極大的缺點:

  1. 命名不規范,Id還是ID,No還是NO,至今我還沒弄明白到底該選擇哪種命名
  2. 簡單CV工程師:xml文件為了減少錯誤,直接從已有的SQL語句粘貼而來(NO),可是Mapper接口我卻選擇自己去寫,采取了我的命名習慣(No)

一定要注意class與yml、xml之間的拼寫錯誤!

技術不分領域,思想一脈相承


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM