注意防踩坑系列
阿新 • • 發佈:2021-12-02
場景:
根據多個條件查詢,返回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;
艾歐尼亞,昂揚不滅,為了更美好的明天而戰(#^.^#)