基本概念
Pageable 是 Spring Data 提供的分页接口,用于在数据查询中实现分页和排序功能。通常与 Page 或 Slice 结合使用,表示查询结果的分页数据。
核心方法
Pageable 接口定义了以下关键方法:
int getPageNumber():返回当前页码(从 0 开始)。int getPageSize():返回每页的数据量。long getOffset():返回当前页的起始偏移量。Sort getSort():返回排序规则(如按字段升序/降序)。
创建 Pageable 对象
通过 PageRequest(Pageable 的实现类)创建分页请求:
// 基础分页(页码从 0 开始,每页 10 条)
Pageable pageable = PageRequest.of(0, 10);
// 分页 + 排序(按 name 升序)
Pageable pageableWithSort = PageRequest.of(0, 10, Sort.by("name").ascending());
// 多字段排序(先按 name 降序,再按 id 升序)
Sort sort = Sort.by("name").descending().and(Sort.by("id").ascending());
Pageable pageableWithMultiSort = PageRequest.of(0, 10, sort);
在 Repository 中使用
Spring Data JPA 的 Repository 可直接支持 Pageable 参数:
public interface UserRepository extends JpaRepository<User, Long> {
Page<User> findByName(String name, Pageable pageable);
}
调用示例:
Page<User> users = userRepository.findByName("Alice", PageRequest.of(0, 5));
users.getContent(); // 获取当前页数据
users.getTotalPages(); // 获取总页数
users.getTotalElements();// 获取总数据量
自定义分页逻辑
若需手动处理分页逻辑,可通过 Pageable 计算偏移量:
List<User> users = entityManager.createQuery("SELECT u FROM User u", User.class)
.setFirstResult((int) pageable.getOffset())
.setMaxResults(pageable.getPageSize())
.getResultList();
前端传递分页参数
通常通过 HTTP 请求参数传递分页信息(如 ?page=0&size=10&sort=name,asc),后端用 @PageableDefault 设置默认值:
@GetMapping("/users")
public Page<User> getUsers(@PageableDefault(size = 5, sort = "id", direction = Sort.Direction.DESC) Pageable pageable) {
return userRepository.findAll(pageable);
}
注意事项
- 页码从 0 开始,与前端约定时需明确。
- 排序字段需与实体类属性名一致,否则抛出异常。
- 复杂分页查询可结合
Specification或QueryDSL使用。
通过上述方法,可以高效实现分页查询功能,适用于大数据量场景。
934

被折叠的 条评论
为什么被折叠?



