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);
   }

于是问题来了,就是返回的总页数总期望是 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 设置成总记录数

你可能感兴趣的:(PageHelper 分页总数不对,返回的总数老是等于当前页数目)