<>项目场景:

       
在公司项目中,成绩查询的业务中有点逻辑在内,需要数据显示两层数据结构和数据筛选和处理,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); }
  

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

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信