出現 org.apache.ibatis.binding.BindingException 異常的原因及解決方法
1 異常描述
在對資料庫表中現有敏感資訊(例如姓名、手機號、身份證號、銀行卡號等)進行加密處理的時候,報出如下錯誤:
2 異常分析
通過觀察上圖中被標記出來的異常資訊,我們可以知道
org.apache.ibatis.binding.BindingException: Invalid bound statement(not found): com.XXX.router.dao.RouterProviderEntityDao.query4encrypt
此異常,為:ibatis 無效繫結異常。
我們知道 MyBatis 源自於 ibatis,在流行的 SSM 框架中,Mybatis 常被用於持久化層,說白了,就是儲存資料,負責將資料持久化(插入)到資料庫。在常見的 Web 專案中,我們又將其劃分為 Dao 層、Service 層、Biz 層和 Facade 層,其中 Dao 層就是負責和資料庫進行互動的,而互動的方式就是用 Mapper 檔案進行資料庫表的對映,併到 Dao 層建立與 Mapper 檔案中 SQL 語句對應的函式。
現在回過頭看這個異常,它發生在router.dao.RouterProviderEntityDao.query4encrypt
這個地方,其中RouterProviderEntityDao
表示 Dao 層,query4encrypt
是 Dao 層中與 Mapper 檔案對應的方法名。而且,這個異常為BindingException
,繫結異常,那麼很有可能就是 Mapper 檔案中 SQL 的 id 名與 Dao 層中的函式名不一致。
3 解決方法
在異常分析之後,檢視 Mapper 檔案中 SQL 的 id 名與 Dao 層中的函式名是否一致,經過檢查,發現兩者確實不一致,其中 SQL 的 id 名為query4Encrypt
query4encrypt
,既然我們已經知道了發生異常的原因,那麼統一兩者之後,即可解決此異常。
溫馨提示:此案例為個性,異常是共性。