JAVA语言(PageHelper分页后,对list操作会导致分页无效)

PageHelper分页后,对list操作会导致分页无效:
	原因问题:先进行分页处理;对已分页的结果进行逻辑处理,导致分页失效
方式一:直接对分页后的PageInfo对象中的数据进行操作

对list集合操作,先取出PageInfo里的list集合数据,再对数据进行相关操作

将操作完后的list集合再次存到PageInfo里,进行return

@Override
    public PageInfo<StudentVo> selectAllStudent(int pageNow, int pageSize) {
        PageInfo<StudentVo> StudentVoList= PageHelper.startPage(pageNow, pageSize).doSelectPageInfo(()->{
            StudentMapper.selectAllStudent();
        });
        // 需要转换的对象
        PageInfo<StudentVo> target = new PageInfo<>();
        // 复制分页属性
        BeanUtils.copyProperties(StudentVoList, target);
        // 对查询的list进行下一步操作,比如类型转换后
        List<StudentVo > collect = StudentVoList.getList().stream().collect(Collectors.toList());
        List<StudentVo > studentList  = new ArrayList<>();
 
        for (StudentVo studentVo : collect) {
            StudentVo  student = new StudentVo ();
            student.setHdId(studentVo.getHdId());
            student.setHdType(studentVo.getHdType());
            student.setHdTitle(studentVo.getHdTitle());
            student.setHdStartDate(studentVo.getHdStartDate());
            student.setHdEndDate(studentVo.getHdEndDate());
            student.setHdStatus(studentVo.getHdStatus());
            student.setHdImage(studentVo.getHdImage());
            student.setHdNumber(studentVo.getHdNumber());
            student.setGmtCreate(studentVo.getGmtCreate());
            student.setGmtModified(studentVo.getGmtModified());
            student.setUserId(studentVo.getUserId());
			
            studentList.add(student);
        }
        // 加工后的数据放入新的pageinfo
        target.setList(studentList);
        return target;
    }
方式二:分页工具类,解决 PageHelper 一个方法多个查询失效问题
  /**
     * @Description:分页工具类
     * @Author: Yrc
     * @Data: 2022/6/29 11:30
     * @Param:
     * @Return:
     * @Version: 1.0
     * Throws:
     */
    public static class PageUtil {

        /**
         * 手动分页类
         *
         * @param datas    查询数据
         * @param pageSize 每页数量
         * @param pageNow页码
         * @return
         */
        public static <T> List<T> getPageSizeData(List<T> datas, int pageSize, int pageNow) {
            //起始截取数据位置
            int startNum = (pageNow- 1) * pageSize + 1;
            if (startNum > datas.size()) {
                return null;
            }
            List<T> res = new ArrayList<>();
            int rum = datas.size() - startNum;
            if (rum < 0) {
                return null;
            }
            //最后一个了
            if (rum == 0) {
                int index = datas.size() - 1;
                res.add(datas.get(index));
                return res;
            }
            //剩下的数据还够1页,返回整页的数据
            if (rum / pageSize >= 1) {
                //截取从startNum开始的数据
                for (int i = startNum; i < startNum + pageSize; i++) {
                    res.add(datas.get(i - 1));
                }
                return res;
                //不够一页,直接返回剩下数据
            } else if ((rum / pageSize == 0) && rum > 0) {
                for (int j = startNum; j <= datas.size(); j++) {
                    res.add(datas.get(j - 1));
                }
                return res;
            } else {
                return null;
            }
        }

        /**
         * 封装分页结果
         *
         * @param list     查询结果
         * @param pageSize 每页数量
         * @param pageNow页码
         * @date 2021/11/30 16:21
         **/
        public static Map<String, Object> getPageResult(List list, int pageSize, int pageNow) {
            //使用工具类得到分页后的每页结果集
            List data = PageUtil.getPageSizeData(list, pageSize, pageNow);
            Map<String, Object> map = new HashMap<>();
            //总条数
            int size = list.size();
            //总页数
            int totlePage = size / pageSize;
            //取余
            int i = size % pageSize;
            if (i > 0) {
                totlePage += 1;
            }
            //结果集
            map.put("list", data);
            //总页数
            map.put("pages", totlePage);
            //页码
            map.put("pageNow", pageNow);
            //每页显示条数
            map.put("pageSize", pageSize);
            //总条数
            map.put("total", size);
            return map;
        }
    }
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

dim_boy

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

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

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

打赏作者

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

抵扣说明:

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

余额充值