PageHelper分页失效问题(通过List流操作和手动分页来解决)

项目场景:

        在公司项目中,成绩查询的业务中有点逻辑在内,需要数据显示两层数据结构和数据筛选和处理,web端需要分页显示,前端展示组件是饿了么UI(Element UI),Java后端接口分页插件使用的是PageHelper


问题描述和分析

        问题描述:PageHelper.startPage(page,pageSize);分页的前提条件就是这条语句放在定义返回结果集前面,但是最后Response返回PageInfo的时候分页失效了,返回多少条显示多少条数据。

       分析原因:返回的结果集内容做了筛选或添加逻辑处理后发生了改变,而PageHelper.startPage源码中有一个参数DEFAULT_COUNT默认为true,前提条件就是结果集内容不变才有效

ServiceImpl中:

    @Override
    public ResponseResult getStudentScoreList(String search, Integer page, Integer pageSize, UserDetails userInfo) {
        PageHelper.startPage(page, pageSize);
        //查询班级下的所以学生
        List<StudentScoreVO> scoreVOList = studentMapper.getStudentScoreStatus(search,userInfo.getId());
        /**
         *此处省略,中间对结果集合做了内容处理
         **/
        return ResponseResult.success(new PageInfo<>(scoreVOList));
    }

解决方案:

通过List流操作和手动PageInfo分页解决,如下:

ServiceImpl中:

    @Override
    public ResponseResult getStudentScoreList(String search, Integer page, Integer pageSize, UserDetails userInfo) {
        //查询班级下的所以学生
        List<StudentScoreVO> scoreVOList = studentMapper.getStudentScoreStatus(search,userInfo.getId());
        /**
         *此处省略,中间对结果集合做了内容处理
         **/
        //计算总记录数
        int total = scoreVOList.size();
        //pageHelper无效,手动分页,流操作:sorted排序、skip跳记录和limit限制显示记录数
        List<StudentScoreVO> collect = scoreVOList
                        .stream()
                        .sorted(Comparator.comparingInt(StudentScore::getGainPoint))
                        .skip((page - 1) * pageSize)
                        .limit(pageSize)
                        .collect(Collectors.toList());
        //计算总页数
        int pageSum = total % pageSize == 0 ? total / pageSize : total / pageSize + 1;
        PageHelper.startPage(page, pageSize);
        PageInfo<StudentScoreVO> scorePageInfo = new PageInfo<>(collect);
        //总记录数
        scorePageInfo.setTotal(total);
        //总页数
        scorePageInfo.setPages(pageSum);
        //清除分页缓存
        PageHelper.clearPage();
        return ResponseResult.success(scorePageInfo);
    }

  

结束语:随心所欲不逾矩,无节制的放纵通常误以为是自由,其实已被欲望所奴役

  • 28
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

热心码民阿振

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值