1. 程式人生 > >mybatis傳參正常且直接執行sql能獲得正確結果但通過mybatis卻查詢不到結果的原因:oracle資料庫中使用了char型別的欄位

mybatis傳參正常且直接執行sql能獲得正確結果但通過mybatis卻查詢不到結果的原因:oracle資料庫中使用了char型別的欄位

問題:

在使用mybatis的過程中,多次檢驗傳參、sql語句等查詢條件,並未發現存在錯誤,直接執行後臺日誌中的sql也能夠查到正確結果,但是後臺mybatis返回的值一直是空。

原因:

經過測試發現是資料庫表結構中使用了char作為欄位型別,而引數的長度和char的長度不符。在oracle中如果char內容長度不夠,那麼會自動用空格補滿。比如我們在char2中插入‘0’,那麼資料庫會自動補齊為‘0 ’,當我們從mybatis傳參‘0’進行比較時,‘0’和‘0 ’不相同,返回值就會是空。

解決方法:

1.修改表結構或者傳參的值,使兩者長度適配

2.修改dao層的xml語句,去除多餘的空格,例如:select * from tb2 where trim(tb2.id)=#{id}