赞
踩
微信公众号:[一起学习大数据呀] 关注可学习更多奇怪的知识!
前言
前几天搞分页遇到一个大头,大佬让我用 PageHelper 来写,看了看其他项目来参考。
结果还是翻车了!!!
原先代码
public Result<PageInfo<TestVo >> queryList(Integer pageIndex, Integer pageSize){ // pageIndex 表示第几页开始 // pageSize 表示每页几条数据 PageHelper.startPage(pageIndex, pageSize); //获取所有信息 List<TestEntity> list = xxxService.findXXXList(); //entity 转 Vo List<TestVo > voList = new ArrayList<>(); for(TestEntity entity : list){ TestVo testVo = new TestVo(); BeanUtils.copyProperties(entity, testVo ); voList.add(vo); } PageInfo<TestVo > pageInfo = new PageInfo<>(TestVo ); return Result.success(pageInfo); }
于是问题来了,就是返回的总页数总期望是 80 条的,可是当前页只有 20 条,总数 20 条。
排查
我参考了大佬的写法,没啥异常,语法(包括 SQL 语句)SQL语句拿去执行全部结果都查出。
至于什么pom 文件等基础配置是有的,毕竟有大佬调用过 PageHelper 了
去网上博客兜兜转转,好家伙,原来问题就是出现在 entity 转 Vo 这个步骤。
修改之后
public Result<PageInfo<TestVo >> queryList(Integer pageIndex, Integer pageSize){ // pageIndex 表示第几页开始 // pageSize 表示每页几条数据 PageHelper.startPage(pageIndex, pageSize); //获取所有信息 List<TestEntity> list = xxxService.findXXXList(); //add PageInfo<TestEntity> page = new PageInfo<>(list); //entity 转 Vo List<TestVo > voList = new ArrayList<>(); for(TestEntity entity : list){ TestVo testVo = new TestVo(); BeanUtils.copyProperties(entity, testVo ); voList.add(vo); } PageInfo<TestVo > pageInfo = new PageInfo<>(volist); //entity page 信息复制到 vo page BeanUtils.copyProperties(page ,pageInfo ); return Result.success(pageInfo); }
总结
1)首先 PageHelper.startPage(pageIndex, pageSize); 是返回 Page 实例,里面包含了总数,当前页数量等信息;
2)List list = xxxService.findXXXList(); 这个 list 通过分页插件处理后的结果,表面上是 List 类型,实际是 Page( extends ArrayList)。
PageInfo 源码:
public PageInfo(List<T> list) { this(list, 8); } public PageInfo(List<T> list, int navigatePages) { super(list); this.isFirstPage = false; this.isLastPage = false; this.hasPreviousPage = false; this.hasNextPage = false; // instanceof 是测试它左边的对象是否是它右边的类的实例 if (list instanceof Page) { //这步才是我们要的!!! Page page = (Page)list; this.pageNum = page.getPageNum(); this.pageSize = page.getPageSize(); this.pages = page.getPages(); this.size = page.size(); if (this.size == 0) { this.startRow = 0; this.endRow = 0; } else { this.startRow = page.getStartRow() + 1; this.endRow = this.startRow - 1 + this.size; } } else if (list instanceof Collection) { this.pageNum = 1; this.pageSize = list.size(); this.pages = this.pageSize > 0 ? 1 : 0; this.size = list.size(); this.startRow = 0; this.endRow = list.size() > 0 ? list.size() - 1 : 0; } if (list instanceof Collection) { this.navigatePages = navigatePages; this.calcNavigatepageNums(); this.calcPage(); this.judgePageBoudary(); } }
3)当我们把 entity 类型的 list 转为 vo 类型的 list,然后放进 PageInfo 那么会丢失分页信息。
参考文献
1: PageInfo返回的total不正确,和list的size一样
2: pageInfo 的 total 属性是当前页记录数,如何配置使 total 设置成总记录数
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。