跳到主要内容

9.5 分页

dbVisitor 的分页围绕两个核心类型:入参 PageObject 描述分页请求,出参 PageResult 承载分页结果。

入:创建分页请求

静态工厂(推荐)
Page page = PageObject.of(0, 20); // 第 0 页,每页 20 条,页码从 0 开始
Page oneBasedPage = PageObject.of(1, 20, 1); // 第 1 页,每页 20 条,页码从 1 开始
构造方法
PageObject page = new PageObject();
page.setPageSize(20); // 页大小(默认 0;请显式设置正数)
page.setCurrentPage(2); // 当前页码
page.setPageNumberOffset(1); // 页码偏移:设为 1 则第一页页码为 1

核心属性:

属性说明
pageSize每页记录数,默认 0;分页查询应显式设置正数
currentPage当前页码
pageNumberOffset页码起始偏移。设为 1 则第一页页码为 1;默认 0

翻页方法:firstPage() / previousPage() / nextPage() / lastPage()

出:读取分页结果

当 API 返回 PageResult<T> 时,可以读取分页统计信息:

PageResult<User> result = mapper.pageBySample(sample, pageInfo);

List<User> data = result.getData(); // 当前页数据
long total = result.getTotalCount(); // 总记录数
long pages = result.getTotalPage(); // 总页数
long position = result.getFirstRecordPosition(); // 第一条记录位置

通过 result.getData() 获取列表并遍历当前页数据。

在各 API 中使用

分页对象本身是通用的,但接入方式因 API 而异:

API如何分页返回类型
构造器 APIlambda.query(...).initPage(10, 0).usePage(page)List<T>
BaseMappermapper.pageBySample(sample, page)PageResult<T>(含统计)
注解 Mapper方法签名加 Page 参数List<T>PageResult<T>
Mapper 文件方法签名加 Page 参数List<T>PageResult<T>

详细用法请参考各 API 的分页章节:

数据源差异

分页对象的用法不随数据库变化,但分页 SQL、总数 SQL 和执行边界由数据源决定: