之前有個需求,在一個頁面中需要有多個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總共只有三條數據,當頁數超過當前總頁數時會查詢第一頁的,即參數分頁合理化,如果后面的哥們有遇到類似的問題,希望能能幫到。