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);
}
结束语:随心所欲不逾矩,无节制的放纵通常误以为是自由,其实已被欲望所奴役
Victorycarlson: 太帅了博主,手动加老是报莫名其妙的太长了错误。powershell直接成功!
说笑Oo: 大佬 连不了网下载不了rar的解压文件 还有其他方法吗
拄杖忙学轻声码: 你好,请教一下 { "registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"], "dns": ["100.xxx.1.20", "100.xx.1xx.250"], "data-root": "/mnt/var/lib/docker" } 这里面的 dns 属性值是配置什么的ip地址?
weixin_42509093: 写的很好,直接拿来用了
热心码民阿振: 感谢仍在行走大佬的光临,您的每一句赞赏都是我前行的动力,如同晨露滋养着娇花,使之更加绚烂夺目。愿我们共同进步与学习