注意防踩坑系列
场景:
根据多个条件查询,返回list集合数据
代码:
// 第1步:根据页面多个条件查询
List<Base> list = userDao.queryOrders(queryParams);
if(null == list)
return null;
//第2步:有数据再追加其他信息
List<Long> 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<Base> 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<Base> list = userDao.queryOrders(queryParams);
if(CollectionUtils.isEmpty(list))
return null;
艾欧尼亚,昂扬不灭,为了更美好的明天而战(#^.^#)