分页失效处理"/>
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分页失效处理
发布评论