ibatis resultMap引數填充異常:java.sql.SQLException: Column 'XXX' not found.

執筆記憶的空白發表於2017-03-22

今天使用ibatis時,出現了一個讓人開始很疑惑的異常,後面看官方文件才找到,是我用mybatis習慣了,所以對於ibatis的這種細節區分沒太在意。問題是因為resultMap是一整個物件,而我的查詢只查詢了部分的欄位值,在填充resultMap時,報了一個SQL異常,XXX欄位沒找到

 Cause: java.sql.SQLException: Column 'XXXX' not found.


然後就順帶去分析mybatis和ibatis的區別:

1、在判斷空值上面,iBatis是有標籤的<isNotEmpty><isNotNull>等標籤使用,MyBatis確是使用<if></if>來進行這些判斷的


2、ibatis和Mybatis 對於 resultMap 填充值的區別

iBatis中我們在查詢多條資料的時候都會返回一個resultMap,那麼我們查詢的資料就和resultMap對應,那麼有沒有想過如果兩邊對不上會怎麼樣,特別是在resultMap公用的情況下,你在那邊加會有什麼影響等情況。
經過我的測試發現,如果查詢的欄位多了,resultMap對應的欄位少了,不會報錯,只是查詢後後臺取的的資料這個欄位為NULL值
如果resultMap的欄位多了,查詢資料的時候沒有查詢出來這個資料,那麼此時就會報錯,比如說我查詢的時候沒有查詢name這個欄位,但是resultMap裡面對應的有這個欄位,就會報如下錯誤

 Cause: java.sql.SQLException: Column 'name' not found.

mybatis則不會報錯,只是結果為空值而已


3、ibatis在動態傳值時,只需要用#標記即可,而mybatis則需要使用el表示式一樣#{}


先記到這,後續補充

相關文章