異常記錄——使用Mybatis報BindingException

NO IMAGE

異常記錄——使用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:

異常記錄——使用Mybatis報BindingException

Mapper接口:

異常記錄——使用Mybatis報BindingException

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

解決方法

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

總結與反思

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

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

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

技術不分領域,思想一脈相承,歡迎訪問橙味菌的博客

本文由博客一文多發平臺 OpenWrite 發佈!

相關文章

徹底理解IaaS、PaaS、SaaS

【一分鐘系列】一分鐘瞭解git常用操作

架構師,怎樣才能搞定上下游客戶?

當Parallel遇上了DISpring並行數據聚合最佳實踐