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

网站建设 福田东莞推广系统怎么做

网站建设 福田,东莞推广系统怎么做,东光网站建设淘宝店铺装修,温州seo优化文章目录 Spring Data JPA 中的分页实现:从 BasePage 到 Pageable背景:为什么需要分页?认识 BasePage 类深入 toPageable() 方法1. 处理页码和页面大小2. 处理排序方向3. 处理排序字段4. 生成 Pageable 对象 实战:如何使用 BasePa…

文章目录

  • Spring Data JPA 中的分页实现:从 BasePage 到 Pageable
    • 背景:为什么需要分页?
    • 认识 BasePage 类
    • 深入 toPageable() 方法
      • 1. 处理页码和页面大小
      • 2. 处理排序方向
      • 3. 处理排序字段
      • 4. 生成 Pageable 对象
    • 实战:如何使用 BasePage
      • 1. 前端请求
      • 2. 后端控制器
      • 3. 查询数据库
      • 4. 返回结果
    • 小结


Spring Data JPA 中的分页实现:从 BasePage 到 Pageable

在现代 Web 开发中,分页是一个常见的需求。无论是展示商品列表、文章列表还是用户数据,当数据量较大时,分页不仅能提升用户体验,还能减轻服务器的压力。如果你使用的是 Spring Boot 和 Spring Data JPA,那么分页功能已经内置其中,开发者只需简单配置即可实现。今天,我们通过一个简单的 BasePage 类,来看看如何优雅地实现分页和排序功能。

背景:为什么需要分页?

假设你正在开发一个电商平台,数据库中有成千上万的商品记录。如果一次性将所有数据返回给前端,不仅加载速度会变慢,用户也很难从中找到所需信息。这时,分页就派上用场了:每页显示固定数量的记录(比如 10 条),用户可以通过翻页操作逐步浏览。

Spring Data JPA 提供了一个强大的接口 Pageable,它封装了分页和排序的逻辑。通过 Pageable,我们可以轻松实现“第几页”、“每页几条”以及“按什么字段排序”的功能。而今天的主角——BasePage 类,就是一个自定义的分页模型,通过它我们可以将前端传入的分页参数转换为 Pageable 对象。

认识 BasePage 类

BasePage 是一个简单的分页模型类,包含了分页和排序的核心属性。以下是它的代码结构:

public class BasePage {@ApiModelProperty("页码")Integer page;@ApiModelProperty("页大小")Integer size;@ApiModelProperty(value = "排序规则(ASC/DESC)", allowableValues = "ASC,DESC")String direction;@ApiModelProperty("排序字段")String[] properties;// 构造函数、getter 和 setter 略public Pageable toPageable() {page = page != null ? page : 0;size = size != null ? size : 9999;Sort.Direction dir = Sort.Direction.fromOptionalString(this.direction).orElse(Sort.Direction.DESC);Sort sort = (properties != null && properties.length > 0) ? Sort.by(dir, properties) : Sort.by(dir, "createdDate");return PageRequest.of(page, size, sort);}
}

这个类包含了四个关键属性:

  • page:页码,表示当前是第几页。
  • size:每页的大小,表示每页显示多少条记录。
  • direction:排序方向,可以是 "ASC"(升序)或 "DESC"(降序)。
  • properties:排序字段,表示按哪些字段排序。

toPageable() 方法则是这个类的核心,它将这些属性转化为 Spring Data JPA 所需的 Pageable 对象。

深入 toPageable() 方法

让我们一步步拆解 toPageable() 方法,看看它是如何工作的:

1. 处理页码和页面大小

page = page != null ? page : 0;
size = size != null ? size : 9999;
  • 如果 page 未设置(null),默认值为 0,表示第一页(Spring Data 的页码从 0 开始)。
  • 如果 size 未设置,默认值为 9999。这是一个很大的数字,通常是为了在未指定页面大小时尽量返回所有数据。不过在实际应用中,建议根据业务需求设置一个合理的默认值,比如 10 或 20。

2. 处理排序方向

Sort.Direction dir = Sort.Direction.fromOptionalString(this.direction).orElse(Sort.Direction.DESC);
  • Sort.Direction 是 Spring Data 的枚举类,表示排序方向。
  • fromOptionalString(this.direction) 尝试将 direction(如 “ASC” 或 “DESC”)解析为 Sort.Direction 类型。
  • 如果解析失败或 directionnull,则使用默认值 Sort.Direction.DESC(降序)。

3. 处理排序字段

Sort sort = (properties != null && properties.length > 0) ? Sort.by(dir, properties) : Sort.by(dir, "createdDate");
  • 如果 properties 不为空,则按指定的字段排序。
  • 如果 properties 为空或未设置,则默认按 "createdDate"(创建时间)字段排序。
  • Sort.by(dir, properties) 创建了一个 Sort 对象,封装了排序方向和字段。

4. 生成 Pageable 对象

return PageRequest.of(page, size, sort);
  • 使用 PageRequest.of() 方法,将页码、页面大小和排序规则组合成一个 Pageable 对象。
  • 这个对象可以直接传递给 Spring Data 的查询方法。

实战:如何使用 BasePage

假设我们有一个商品管理的接口,需要支持分页和排序。以下是实现步骤:

1. 前端请求

前端发送一个 HTTP 请求,例如:

GET /products?page=1&size=10&direction=ASC&properties=price
  • page=1:请求第 2 页(从 0 开始计数)。
  • size=10:每页 10 条记录。
  • direction=ASC:按升序排序。
  • properties=price:按价格排序。

2. 后端控制器

在 Spring Boot 的控制器中接收参数并构造 BasePage

@RestController
@RequestMapping("/products")
public class ProductController {@Autowiredprivate ProductRepository productRepository;@GetMappingpublic Page<Product> getProducts(@RequestParam(required = false) Integer page,@RequestParam(required = false) Integer size,@RequestParam(required = false) String direction,@RequestParam(required = false) String[] properties) {BasePage basePage = new BasePage();basePage.setPage(page);basePage.setSize(size);basePage.setDirection(direction);basePage.setProperties(properties);Pageable pageable = basePage.toPageable();return productRepository.findAll(pageable);}
}

3. 查询数据库

ProductRepository 是一个 Spring Data JPA 提供的接口:

public interface ProductRepository extends JpaRepository<Product, Long> {
}

调用 findAll(Pageable pageable) 方法后,Spring Data 会自动生成 SQL 查询,返回分页后的结果。

4. 返回结果

最终返回的 JSON 可能长这样:

{"content": [{"id": 1, "name": "商品A", "price": 10.0},{"id": 2, "name": "商品B", "price": 15.0},...],"totalElements": 50,"totalPages": 5,"number": 1,"size": 10
}

小结

通过 BasePagetoPageable() 方法,我们实现了一个简单而灵活的分页模型。它的优点在于:

  • 简单易用:只需设置几个属性,就能生成 Pageable 对象。
  • 默认值友好:未设置的参数有合理的默认值,避免空指针问题。
  • 支持排序:灵活指定排序字段和方向,满足复杂需求。

当然,实际开发中还可以根据需求扩展 BasePage,比如添加参数验证、支持多字段排序等。Spring Data JPA 的分页功能非常强大,配合自定义模型类,可以让代码更优雅、更易维护。

如果你也正在为分页功能苦恼,不妨试试这种方式吧!有什么问题或想法,欢迎在评论区交流。


在这里插入图片描述

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

相关文章:

  • 怎么做免费域名网站wordpress 图片库
  • 全网营销公司洛阳seo网络推广
  • git知识点
  • 制作网站要钱吗oppo开放平台
  • AI 伦理困局:参与式治理如何破解技术狂飙
  • 广州新际网站建设公司怎么样大连本地网
  • 【算法训练营Day27】动态规划part3
  • 网站后台管理系统软件开发一款app成本
  • 衡阳网站建设专家今天的特大新闻有哪些
  • 电子政务网站建设西安网站建设电话
  • 论文解读:GRAPHEVAL: A LIGHTWEIGHT GRAPH-BASED LLM FRAMEWORK FOR IDEA EVALUATION
  • 门业网站 模板it运维工程师工作内容
  • 河北省住房和城乡建设厅网站打不开学做网站论坛教程下载
  • Java 异常体系:从 Throwable 根类到自定义异常,一篇理清所有分类与逻辑
  • 仿5173网站汕尾旅游攻略app跳转网站
  • memory_profiler各个参数都是什么意思?
  • 网站开发技术简介dwsynology建设网站
  • p2p网站建设框架如何在google上免费推广
  • win7 win10 win11安装IE11浏览器
  • 深度学习池化(Pooling)的进阶应用与优化策略
  • 家庭宽带 做网站wordpress登陆后返回
  • 松岗网站的建设sasaki景观设计公司官网
  • 关于win11的Microsoft To Pdf打印机修改端口后无法再刷新显示于设备界面的问题
  • 深圳市网站建设外包公司排名某个网站做拍卖预展的好处
  • 苏州做网站公司认定苏州聚尚网络创新创意产品设计作品
  • AOI检测在半导体制造领域有哪些主要应用
  • 含山建设局网站支持快钱支付的网站
  • Win环境下包管理工具
  • 陕西西安网站建设公司哪家好微网站方案怎么写
  • 阜阳网站制作公司去哪找山东省城乡住房和城乡建设厅网站