public class PagingAndSortingQueryParams extends Object
包含三个主要的属性:
分页必须伴随着排序,不然可能出现同一个对象重复出现在不同页,有的对象不被查询到的情况。
其中 orderBy 是一个 List<String>,可以指定多个排序条件。
每个排序条件是一个字符串, 格式为“属性名-ASC”或“属性名-DESC”,分别表示升序和降序。
例如,当 orderBy 的值为 ["name-ASC","age-DESC"],
意味着要按 name 进行升序排列,name 相同的情况下则按 age 进行降序排列。
用户可继承 PagingAndSortingQueryParams 构建自己的分页查询入参,
子类需在构造器中调用 PagingAndSortingQueryParams 的构造器,
传入一个 PagingAndSortingQueryParams.PagingParamsBuilder 用于构建分页参数。
同一场景下,复用一个 PagingAndSortingQueryParams.PagingParamsBuilder 实例即可。
构建 PagingAndSortingQueryParams.PagingParamsBuilder 时,需传入一个 Map 作为可排序字段的白名单,
key 是供前端指定用于排序的属性名,value 是对应数据库中的字段名。
只有在此白名单中的属性名才允许用于排序。
class AccountQueryParams extends PagingAndSortingQueryParams {
private static final Map<String, String> PROPERTY_COLUMN_MAP = ImmutableMap.<String, String>builder()
.put("id", "id")
.put("username", "username")
.build();
private static final PagingParamsBuilder PAGING_PARAMS_BUILDER = PagingAndSortingQueryParams
.pagingParamsBuilder(20, 100, PROPERTY_COLUMN_MAP);
public AccountQueryParams() {
// 所有的 AccountQueryParams 复用同一个 PagingParamsBuilder 实例
super(PAGING_PARAMS_BUILDER);
}
private @Getter @Setter Long id;
private @Getter @Setter String username;
private @Getter @Setter String email;
private @Getter @Setter Integer status;
}
public PageResult<AccountVO> queryPage(AccountQueryParams params) {
// 获取分页参数
PagingParams pagingParams = params.buildPagingParams();
// 从 params 获取字段查询条件,从 pagingParams 获取分页条件,查询一页数据
List<AccountVO> list = accountQueries.queryAccountList(params, pagingParams);
// 查询总记录数
long count = accountQueries.countAccount(params);
// 返回分页结果
return PageResult.of(list, count);
}
PagingParams,
PageResult| Modifier and Type | Class and Description |
|---|---|
protected static class |
PagingAndSortingQueryParams.PagingParamsBuilder |
static class |
PagingAndSortingQueryParams.SortableProperty
可排序属性
|
| Modifier | Constructor and Description |
|---|---|
protected |
PagingAndSortingQueryParams(PagingAndSortingQueryParams.PagingParamsBuilder pagingParamsBuilder)
创建一个
PagingAndSortingQueryParams 实例 |
| Modifier and Type | Method and Description |
|---|---|
PagingParams |
buildPagingParams()
根据当前查询参数,构建分页参数
|
protected static PagingAndSortingQueryParams.PagingParamsBuilder |
pagingParamsBuilder(int defaultSize,
int maxSize,
Map<String,String> sortableProperties)
创建一个分页参数构造器
|
void |
setOrderBy(List<String> orderBy)
设置排序规则
|
void |
setPageNum(Long pageNum)
设置页码
|
void |
setSize(Integer size)
设置每页大小
|
String |
toString() |
protected PagingAndSortingQueryParams(PagingAndSortingQueryParams.PagingParamsBuilder pagingParamsBuilder)
PagingAndSortingQueryParams 实例pagingParamsBuilder - 分页参数构造器。
通过 pagingParamsBuilder(int, int, Map) 创建,同一场景下只需要共享同一个实例。public final void setOrderBy(List<String> orderBy)
orderBy - 排序规则,不能为空protected static PagingAndSortingQueryParams.PagingParamsBuilder pagingParamsBuilder(int defaultSize, int maxSize, Map<String,String> sortableProperties)
defaultSize - 默认每页大小maxSize - 最大每页大小sortableProperties - 可排序属性。
key 是供前端指定用于排序的属性名,value 是对应数据库中的字段名。
只有在此白名单中的属性名才允许用于排序。public PagingParams buildPagingParams()
Copyright © 2026. All rights reserved.