1. 程式人生 > 其它 >注意防踩坑系列

注意防踩坑系列

場景:
根據多個條件查詢,返回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;
艾歐尼亞,昂揚不滅,為了更美好的明天而戰(#^.^#)