場景:
根據多個條件查詢,返回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;