MyBatis分页插件PageHelper的用法的一个小疑问

在一个项目中看到PageHelper分页插件这样的用法

图片描述

阅读 4.1k
2 个回答

productList 返回的是一个 Page 对象,Page 对象的声明:
Page 对象的声明

可见 Page 继承自 ArrayList,所以 Page 对象是一个 List


再来看看 PageInfo 的构造函数的源码:

    public PageInfo(List<T> list) {
        this(list, 8);
    }

    public PageInfo(List<T> list, int navigatePages) {
        if (list instanceof Page) {
            Page page = (Page) list;
            this.pageNum = page.getPageNum();
            this.pageSize = page.getPageSize();

            this.pages = page.getPages();
            this.list = page;
            this.size = page.size();
            this.total = page.getTotal();
            
            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.list = list;
            this.size = list.size();
            this.total = list.size();
            this.startRow = 0;
            this.endRow = list.size() > 0 ? list.size() - 1 : 0;
        }
        ...
    }

关注第一个 if (list instanceof Page),可见如果当传入的 List 对象是一个 Page 的时候,可以直接通过这个 Page 对象来获得相关的分页信息。所以,这段代码,作者的意思应该是先通过 productList 这个 Page 对象来设置 PageInfo 的分页信息,然后再通过 setList 方法来改变具体的数据,从而 使得 PageInfo 中既有原来的分页信息,然后数据又是 VO 对象

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题