踩坑系列—mybatis查询没有数据时返回的list是null还是空集合?

场景:
根据多个条件查询,返回list集合数据

代码:

// 第1步:根据页面多个条件查询
List list = userDao.queryOrders(queryParams);

if(null == list)
	return null;

//第2步:有数据再追加其他信息
List ids = new ArrayList<>(list.size());
for (Base base : list){
		ids.add(base.getId());
}

//第3步:根据ids使用in查询

//第4步:将追加完信息的list返回

现象:

测试的时候少输入了某个条件,queryOrders查询有结果,代码正常,但是当输入这个条件,导致queryOrders没有查询结果时,报了sql错误,而且错误的sql是 【第3步:根据ids使用in查询】 这里导致的。

排查:

按自己之前的理解,queryOrders没有查询结果,
if(null == list)
return null;
这里就会返回,不会执行下面的代码,但是结果非预期,于是打印list,观察

List list = userDao.queryOrders(queryParams);
logger.info("query result list size:" + (null == list ? "空" : list.size()));

当输入查询条件,queryOrders没有查询结果时,控制台打印出的信息:
2019-02-19 15:07:24,003 INFO(PurchasingRemoteSerciceImpl.java:123) - query result list size:0

测试结果:
mybatis查询没有数据时返回的list是空集合,即size=0 并不是null

更改代码如下,查询正常:

List list = userDao.queryOrders(queryParams);
if(CollectionUtils.isEmpty(list))
	return null;

你可能感兴趣的:(踩坑系列)