当前位置: 首页 > news >正文

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 使用。

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

http://www.dtcms.com/a/337557.html

相关文章:

  • AI应用商业化加速落地 2025智能体爆发与端侧创新成增长引擎
  • BeeWorks 私有化会议系统:筑牢企业会议安全防线,赋能高效协同
  • 敏感数据加密平台设计实战:如何为你的系统打造安全“保险柜”
  • 高防IP如何实现秒级切换?
  • 技术赋能安全:智慧工地构建城市建设新防线
  • AR技术为消防救援装上“智能透视眼”
  • K8s的命名空间需要创建吗
  • 容器化 Android 开发效率:cpolar 内网穿透服务优化远程协作流程
  • Redis主从架构、哨兵模式及集群比较
  • 利用深度强化学习进行芯片布局
  • 【1:1复刻R版】python版火山图函数一键出图
  • iOS 正式包签名指南
  • 【LeetCode】15. 三数之和
  • 从财务整合到患者管理:德国医疗集团 Asklepios完成 SAP S/4HANA 全链条升级路径
  • 贪心算法(Greedy Algorithm)详解
  • 【机器学习】Macro-F1(宏平均 F1)是什么?
  • SWMM排水管网水力、水质建模及在海绵与水环境中的应用技术-模拟降雨和污染物质经过地面、排水管网、蓄水和处理
  • Jenkins启动端口修改失败查找日志
  • 音频算法工程师技能1
  • Vue2篇——第五章 Vue.js 自定义指令与插槽核心
  • 【序列晋升】:9 Service Mesh微服务通信的基础设施革命
  • 电子元器件-电容终篇:基本原理、参数解读、电路作用、分类及区别、应用场景、选型、降频及实战案例
  • Linux 系统~存储高级技术
  • C++ 中的 delete 与 default 关键字详解
  • diffusion model(1.4) 相关论文阅读清单
  • 遥感数字图像处理教程——第三章课后习题
  • flutter项目适配鸿蒙
  • 人工智能 | 基于大数据的皮肤病症状数据可视化分析系统(matlab源码)
  • Java设计模式-桥接模式
  • Alibaba Cloud Linux 3 在 Apple M 芯片 Mac 的 VMware Fusion 上部署的完整密码重置教程(二)