問題描述
在項目中使用mybatis映射的時候; 返回的結果集是List ;查詢的結果集List的size是1 ; 然而在調用 list.get(0)的時候; 返回值爲 null;
解決方案:
檢查sql裏面的查詢字段; 是否至少有一個字段一定有值; 保證select 後面查詢的某一個字段一定有值;不能select 後面的字段全爲 null;
問題原因分析:
由於 select 的字段值查詢的結果全部爲 null ; 所以到就會導致該對象爲null ; 如下圖所示:
sql代碼:
SELECT a ,b FROM table where name= 487
執行結果:
然後 mybatis在映射到結果集的時候; 返回的改對象就會爲 null ;
如圖所示;下面截圖是上面sql 通過maybatis映射返回的List裏面的結果;
看到結果;長度爲1;但是所有元素都爲null ;
然後調用 get(0)方法自然就會報空指針
分析一下上面的sql ;
首先數據庫肯定是存在這條數據的;否則返回的 histories 這個集合的長度應該是0; 數據庫表 table 裏面確實 存在 name= 487 的數據; 可以查一下數據庫;只是簡單查了這三個字段;
數據確實存在;所以 ;histories 的返回值size 是 1;
由於我們的sql查詢的字段值值剛好都爲 null ; 所以就導致該對象爲 null ;
直接將上面的sql修改一下即可
修改前:
SELECT a ,b FROM table where name= 487
修改後: [加一個id;因爲id一定存在]
SELECT id , a ,b FROM table where name= 487
這樣再次查詢 histories.get(0) 就不會再報空指針異常了!
所以在我們查詢的時候 ;務必保證有一個字段的值是表中一定存在的;否則就會出現類似的情況!