当前位置:   article > 正文

PageHelper 分页总数不对,返回的总数老是等于当前页数目_pagehelper总数不对

pagehelper总数不对

微信公众号:[一起学习大数据呀] 关注可学习更多奇怪的知识!

前言
前几天搞分页遇到一个大头,大佬让我用 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);
   }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

于是问题来了,就是返回的总页数总期望是 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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

总结
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();
        }

    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

3)当我们把 entity 类型的 list 转为 vo 类型的 list,然后放进 PageInfo 那么会丢失分页信息。

参考文献
1: PageInfo返回的total不正确,和list的size一样
2: pageInfo 的 total 属性是当前页记录数,如何配置使 total 设置成总记录数

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/993851?site
推荐阅读
相关标签
  

闽ICP备14008679号