Pageable 菜教程

基本概念

Pageable 是 Spring Data 提供的分页接口,用于在数据查询中实现分页和排序功能。通常与 PageSlice 结合使用,表示查询结果的分页数据。


核心方法

Pageable 接口定义了以下关键方法:

  • int getPageNumber():返回当前页码(从 0 开始)。
  • int getPageSize():返回每页的数据量。
  • long getOffset():返回当前页的起始偏移量。
  • Sort getSort():返回排序规则(如按字段升序/降序)。

创建 Pageable 对象

通过 PageRequestPageable 的实现类)创建分页请求:

// 基础分页(页码从 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 开始,与前端约定时需明确。
  • 排序字段需与实体类属性名一致,否则抛出异常。
  • 复杂分页查询可结合 SpecificationQueryDSL 使用。

通过上述方法,可以高效实现分页查询功能,适用于大数据量场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值