解决:(坑)MyBatis 分页插件 PageHelper 每页记录数 和总记录数 一样问题
场景:
- 页面 每页记录数 和 总记录数一样 问题
- 先查list 在进行筛选 生成 新list 对 list 进行分页
尝试解决
- pageInfo.setList( 新list)
失败: list 可以更新 但是pagetotal 不会更新
原因:pagetotal 是第一个sql 查询的countPageHelper.startPage(pageNum, pageSize)
只会对下面第一个sql查询语句进行 count 查询 和 分页查询 如果第一条sql 没有分页, PageHelper 会自动加上 limit- pageInfo.setTotal(新list.size())
失败: total 虽然更新了 但是会出现新问题 : 假如每页500条数据 查询第二页 只会有470条数据, 后面的数据不会补充到第二页
原因: 数据分页查询已经在sql 中查询完了 后面的逻辑 虽然会改变 list 筛选后的数据 但是新list 总数 不会大于list.size()- 最后 先把所有数据查出来,再 new一个 pageInfo 然后手动把每项参数 set 进去
ok!
上码:
public PageResult querySimSaleListByFAgentId(int pageNum, int pageSize, BigInteger agentId, int simType, BigInteger packageId, String key, int isBindAsset) {
//业务逻辑..............................
List<SimSale> list = simStoreManagerDao.querySimSaleListByFAgentId(agentId, simType, packageId, key);
List<SimSale> rtn_list = new ArrayList<>();
//获取流量使用情况
for (SimSale simSale : list) {
if (isBindAsset == 1 && CommonUtils.isStrEmpty(simSale.getBindAsset())) {
//不做处理
} else {
rtn_list.add(simSale);
}
}
//............................................
// 分页插件不生效 手动分页
PageInfo<SimSale> pageInfo = new PageInfo<>(rtn_list);
pageInfo.setPageNum(pageNum);
pageInfo.setPageSize(pageSize);
pageInfo.setTotal(rtn_list.size());
if (pageNum==1){
pageInfo.setStartRow(0);
}else {
pageInfo.setStartRow((pageNum-1)* pageSize );
}
if (pageNum*pageSize < pageInfo.getTotal()){
pageInfo.setEndRow(pageNum*pageSize);
}else {
pageInfo.setEndRow((int)pageInfo.getTotal());
}
List<SimSale> simSaleList = rtn_list.subList(pageInfo.getStartRow(), pageInfo.getEndRow());
pageInfo.setList(simSaleList);
PageResult pageResult = PageUtils.getPageResult(pageInfo);
return pageResult;
}
图: