之前有個需求,在一個頁面中需要有多個sql分頁查詢然后放到一個list中,展示,但是會出現一個bug,就是每次分頁都會展示第一條查出的所有的數據;
第一頁

第二頁

因為是截的生產環境,第一條數據被處理了,所有截圖有差異,不影響。
看service方法:
public Map getInvoiceList(String epid, String parameter, int page, int pageSize) {
Map result = new HashMap();
//查詢發票開票日期小於等於前2天
Date endTime = DateUtil.addDays(-2);
//分頁處理
Map paramMap = new HashMap();
paramMap.put("epid", epid);
paramMap.put("status", 10);
paramMap.put("endTime", endTime);
PageHelper.startPage(page, pageSize);
List<Map> oldMap = invoiceMapper.reviewInvoiceList(paramMap);//可復查的發票
List<Map> list = new ArrayList<>();//第一次查驗發票
List<Map> totalList = new ArrayList<>();//可查驗發票總和
if(null != oldMap && !oldMap.isEmpty()){
totalList.addAll(oldMap);
PageHelper.startPage(page, pageSize-oldMap.size());
}else{
PageHelper.startPage(page, pageSize);
}
list = invoiceMapper.invoiceList(paramMap);
if(null != list && !list.isEmpty()){
totalList.addAll(list);
AmountFormatUtil.formatAmount(totalList,"inv_amount");
}
//創建返回值對象
PageInfo<List<Map>> pageInfo = new PageInfo(totalList);
PageInfo<List<Map>> pageInfo1 = new PageInfo(oldMap);
PageInfo<List<Map>> pageInfo2 = new PageInfo(list);
result.put("invoiceData", pageInfo.getList());
result.put("number", pageInfo1.getTotal()+pageInfo2.getTotal());
return result;
}
發現第一條sql每次翻頁查詢時都是會查出所有的:

最后在另一篇博客中發現了:
最后在設置中修改:
@Bean
public PageHelper pageHelper() {
log.info("注冊MyBatis分頁插件PageHelper");
PageHelper pageHelper = new PageHelper();
Properties p = new Properties();
p.setProperty("offsetAsPageNum", "true");
p.setProperty("rowBoundsWithCount", "true");
p.setProperty("reasonable", "false");//這里之前是true
pageHelper.setProperties(p);
return pageHelper;
}
所以我的查詢數據中,第一條sql總共只有三條數據,當頁數超過當前總頁數時會查詢第一頁的,即參數分頁合理化,如果后面的哥們有遇到類似的問題,希望能能幫到。

