一、问题描述
- serve层定义一个对象集合接收mybatis返回的结果,查询结果为空,但是接收集合对象长度却为1,集合内部显示All elements are null;导致在直接调用list集合中一些方法时导致报错java.lang.NullPointerException: null
二、原因分析
1、使用了MySQL中的聚合函数
select
IFNULL(GROUP_CONCAT(B00),
'') as examineRange,
IFNULL(GROUP_CONCAT(B0101),
'') as examineRangeName
from
(
select
a.B00,
b.B0101
from
jxkh_khdxfwxd a
inner join b01 b on
a.B00 = b.B00
order by
a.PORDER)a
对于我们来说,这条数据是空的,也仅仅是因为我们要查询的字段是空的,但是其他数据都不是空的,所以他把这个数据数据库并没有当作一条空数据来看,还是映射给了我们的对象,导致List的内部有一个空对象,因为list内部是可以支持null的。
三、解决方案
手动将这种情况给排除掉。或者,先把list中的null元素给排除掉,然后在进行业务的数据处理
//移除第一个null
list.remove(null);
//或移除所有的null元素
list.removeAll(Collections.singleton(null));
或者也可通过增加判断来进行处理
if (CollectionUtils.isNotEmpty(listData) && listData.get(0) != null) {
/*
业务逻辑代码
*/
}