異常信息
org.apache.ibatis.binding.BindingException
nested exception is org.apache.ibatis.binding.BindingException: Parameter 'deviceNO' not found. Available parameters are [deviceNo, deviceId, param1, param2]
場景回溯
業(yè)務場景:車輛表嚷辅,需要更新指定編號車輛的設備Id(編號和設備ID均非主鍵)毕箍,因而在對應的mapper.xml中自定義了SQL語句铸豁,結(jié)果調(diào)用對應接口時爆出異常
當然可以直接使用Mybatis-plus的EntityWrapper,這樣做雖然方便洲脂,但是第一影響性能杖刷,第二造成職責劃分不清(SQL的拼裝屬于dao層励饵,它從來就不該在Service層完成)
原因排查
apache的ibatis將原因說的很清楚:Parameter 'deviceNO' not found. Available parameters are [deviceNo, deviceId, param1, param2] ,沒找到xml里使用占位符表示的參數(shù)(#{deviceNO})滑燃,能用的參數(shù)有deviceNo役听、deviceId等,很明顯是發(fā)生了拼寫錯誤
xml:
Mapper接口:
是一個字母的大小寫引發(fā)的錯誤
解決方法
更改參數(shù)名使xml和Mapper接口里一致即可
總結(jié)與反思
一個字母的大小寫錯誤不瓶,不僅僅是引發(fā)了BindingException異常禾嫉,而且它還暴露了我極大的缺點:
- 命名不規(guī)范,Id還是ID蚊丐,No還是NO熙参,至今我還沒弄明白到底該選擇哪種命名
- 簡單CV工程師:xml文件為了減少錯誤,直接從已有的SQL語句粘貼而來(NO)麦备,可是Mapper接口我卻選擇自己去寫孽椰,采取了我的命名習慣(No)
一定要注意class與yml、xml之間的拼寫錯誤凛篙!
技術(shù)不分領(lǐng)域黍匾,思想一脈相承,歡迎訪問橙味菌的博客
本文由博客一文多發(fā)平臺 OpenWrite 發(fā)布呛梆!