1. 程式人生 > >出現 org.apache.ibatis.binding.BindingException 異常的原因及解決方法

出現 org.apache.ibatis.binding.BindingException 異常的原因及解決方法

1 異常描述

在對資料庫表中現有敏感資訊(例如姓名、手機號、身份證號、銀行卡號等)進行加密處理的時候,報出如下錯誤:

binding

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

而 Dao 層中的函式名為query4encrypt,既然我們已經知道了發生異常的原因,那麼統一兩者之後,即可解決此異常。

溫馨提示:此案例為個性,異常是共性。