解决:(坑)MyBatis 分页插件 PageHelper 每页记录数 和总记录数 一样问题

解决:(坑)MyBatis 分页插件 PageHelper 每页记录数 和总记录数 一样问题

场景:

  1. 页面 每页记录数 和 总记录数一样 问题
  2. 先查list 在进行筛选 生成 新list 对 list 进行分页

尝试解决

  1. pageInfo.setList( 新list)
    失败: list 可以更新 但是pagetotal 不会更新
    原因:pagetotal 是第一个sql 查询的count PageHelper.startPage(pageNum, pageSize)只会对下面第一个sql查询语句进行 count 查询 和 分页查询 如果第一条sql 没有分页, PageHelper 会自动加上 limit
  2. pageInfo.setTotal(新list.size())
    失败: total 虽然更新了 但是会出现新问题 : 假如每页500条数据 查询第二页 只会有470条数据, 后面的数据不会补充到第二页
    原因: 数据分页查询已经在sql 中查询完了 后面的逻辑 虽然会改变 list 筛选后的数据 但是新list 总数 不会大于list.size()
  3. 最后 先把所有数据查出来,再 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;
    }         

图:在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值