stream排序导致pageHelper分页失效处理

编程入门 行业动态 更新时间:2024-10-05 17:28:12

stream排序导致pageHelper<a href=https://www.elefans.com/category/jswz/34/1769545.html style=分页失效处理"/>

stream排序导致pageHelper分页失效处理

场景描述
    现有一查询会员上课记录的需求,要求按照上课时间进行倒序排列,考虑到后期数据量很多,使用逻辑层进行排序,但是前端小姐姐反应说查询的总记录数不正确.测试库中每页查询20条,实际所有数据总共37条,但是返回的总记录数竟然是20条,说明pageHelper分页失效.

以下是逻辑层代码:

 public PageInfo<SignCourseRecord> findSignCourseRecordList(SignCourseQueryDto signCourseQueryDto) {PageHelper.startPage(signCourseQueryDto.getPageCurrent(),signCourseQueryDto.getPageSize());// 查询上课记录信息List<SignCourseRecord> signCourseRecordList = financeMapper.findSignCourseRecordList(signCourseQueryDto);// 按照预约时间倒序,性能优化处理:数据库排序改为内存排序if(CollectionUtil.isNotEmpty(signCourseRecordList)){signCourseRecordList=signCourseRecordList.stream().sorted(Comparatorparing(SignCourseRecord::getStartTime).reversed()).collect(Collectors.toList());}PageInfo<SignCourseRecord> signCourseRecordPageInfo = new PageInfo<>(signCourseRecordList);return signCourseRecordPageInfo;}

    至于失效的原因,之前的帖子已经从源码角度分析过,实际是由stream导致,具体原因可以看下之前写的文章:
stream流导致pageHelper分页失效问题记录
    这里只说处理方案:在此场景中如果还是想继续使用stream进行排序,需要手动更改分页查询的总记录数.看过源码知道,执行查询操作:financeMapper.findSignCourseRecordList(signCourseQueryDto);是先进行查询所有记录的总数量,设置PageInfo中的total总数量(执行select count(1)),然后执行具体的查询sql.所以在sql查询处理之后总的记录数是已经存在的,只需要暂存一下.等到stream逻辑处理之后重新进行总记录数赋值即可.代码如下:

public PageInfo<SignCourseRecord> findSignCourseRecordList(SignCourseQueryDto signCourseQueryDto) {PageHelper.startPage(signCourseQueryDto.getPageCurrent(),signCourseQueryDto.getPageSize());// 查询上课记录信息List<SignCourseRecord> signCourseRecordList = financeMapper.findSignCourseRecordList(signCourseQueryDto);// modify by txm 2022/9/14 处理PageHelper分页总数失效问题PageInfo<SignCourseRecord> signCourseRecordPageInfo = new PageInfo<>(signCourseRecordList);long totalCount = signCourseRecordPageInfo.getTotal();// 按照预约时间倒叙,性能优化处理:数据库排序改为内存排序if(CollectionUtil.isNotEmpty(signCourseRecordList)){signCourseRecordList=signCourseRecordList.stream().sorted(Comparatorparing(SignCourseRecord::getStartTime).reversed()).collect(Collectors.toList());}// 设置总记录数以及排序后的记录      signCourseRecordPageInfo.setList(signCourseRecordList);signCourseRecordPageInfo.setTotal(totalCount);return signCourseRecordPageInfo;}

查询之后数据:

    以上是对stream排序导致pageHelper失效的问题处理,希望对有同样场景的小伙伴有所帮助!

更多推荐

stream排序导致pageHelper分页失效处理

本文发布于:2024-02-28 09:59:25,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1769366.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:分页   stream   pageHelper

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!