selectOne調用了selectList方法,當selectList方法返回值的size小於1 的時候,selectOne方法會返回null值。我們再來看一下mybatis的xml.
如果你寫了resultType爲Integer,然後在業務代碼中很自然的用一個變量int去接當前這個方法的返回值:
int id = dao.methodName(param);如果按照你傳入的條件在數據庫中沒有找到相關的值,此時selectOne方法的返回值會是一個null,當你使用Java的自動拆箱機制的時候會報出一個無情的NPE。
原因:Java在自動拆箱的時候會調用Integer類中的intValue方法,如果當前對象爲null,則拋出NPE。
所以我們在使用mybatis的這個selectOne方法的時候一定要多加小心。不要踩到坑裏。
怎麼破: 用一個Integer去接一次返回值,然後判斷是否爲空,然後再進行具體的業務邏輯處理。但是!但是!但是!如果把resultType寫成int,呵呵,恐怕無解了。