Spring Boot Starter Data JPA

2025 年 3 月 18 日 | 6 分钟阅读

Spring Data 是一个高级的 Spring Source 项目。它的目的是统一和简化对不同类型的持久化存储的访问,包括关系型数据库系统和 NoSQL 数据存储。

当我们实现一个新的应用程序时,我们应该专注于业务逻辑而不是技术复杂性和样板代码。这就是 Java 持久化 API (JPA) 规范和 Spring Data JPA 如此流行的原因。

Spring Data JPA 在 JPA 之上添加了一个层。这意味着,Spring Data JPA 使用了 JPA 规范定义的所有功能,特别是实体、关联映射和 JPA 的查询功能。Spring Data JPA 添加了自己的功能,例如存储库模式的无代码实现以及从方法名创建数据库查询。

Spring Boot Data JPA

Spring Data JPA 处理了大多数基于 JDBC 的数据库访问和 ORM(对象关系映射)的复杂性。它减少了 JPA 所需的样板代码。它使持久化层的实现更容易、更快。

Spring Data JPA 旨在通过减少所需的工作量来改进数据访问层的实现。

Spring Data JPA 功能

Spring Data JPA 的三个主要功能如下:

  • 无代码存储库:它是最流行的持久化相关模式。它使我们能够在更高的抽象级别上实现业务代码。
  • 减少样板代码:它通过其存储库接口为每个方法提供默认实现。这意味着不再需要实现读写操作。
  • 生成查询:Spring Data JPA 的另一个功能是基于方法名生成数据库查询。如果查询不太复杂,我们只需要在存储库接口上定义一个以 findBy 开头的方法。定义方法后,Spring 会解析方法名并为其创建查询。例如:

在上面的示例中,我们扩展了 CrudRepository,它使用两个泛型:EmployeeLong。Employee 是要管理的实体,而 Long 是主键的数据类型。

Spring 内部根据方法名生成 JPQL (Java Persistence Query Language) 查询。查询派生自方法签名。它设置绑定参数值,执行查询并返回结果。

还有一些其他功能如下:

  • 它可以集成自定义存储库代码。
  • 它是一个强大的存储库和自定义对象映射抽象。
  • 它支持透明审计。
  • 它实现了一个提供基本属性的域基类。
  • 它支持多个模块,例如 Spring Data JPA、Spring Data MongoDB、Spring Data REST、Spring Data Cassandra 等。

Spring Data 存储库

Spring Data JPA 提供三个存储库如下:

  • CrudRepository:它提供标准的创建、读取、更新删除操作。它包含 findOne()、findAll()、save()、delete() 等方法。
  • PagingAndSortingRepository:它扩展了 CrudRepository 并添加了 findAll 方法。它允许我们以分页方式排序检索数据。
  • JpaRepository:这是一个 JPA 特定存储库。它在 Spring Data Jpa 中定义。它扩展了 CrudRepository 和 PagingAndSortingRepository。它添加了 JPA 特定的方法,例如 flush() 来触发持久化上下文上的刷新。

Spring Boot Starter Data JPA

Spring Boot 提供 spring-boot-starter-data-jpa 依赖来高效地将 Spring 应用程序连接到关系型数据库。spring-boot-starter-data-jpa 内部使用 spring-boot-jpa 依赖(自 Spring Boot 1.5.3 版起)。

数据库是设计有表/关系的。早期的方法 (JDBC) 涉及编写 SQL 查询。 在 JPA 中,我们将数据从对象存储到表中,反之亦然。然而,JPA 是不同思维过程的结果。

在 JPA 之前,ORM 是更常用来指代这些框架的术语。这就是 Hibernate 被称为 ORM 框架的原因。

JPA 允许我们将应用程序类映射到数据库中的表。

  • 实体管理器:一旦我们定义了映射,它就处理与数据库的所有交互。
  • JPQL (Java Persistence Query Language):它提供了一种编写查询来对实体执行搜索的方法。它与 SQL 查询不同。JPQL 查询已经理解实体之间定义的映射。如果需要,我们可以添加额外条件。
  • Criteria API:它定义了一个基于 Java 的 API 来对数据库执行搜索。

Hibernate 与 JPA

Hibernate 是 JPA 的实现。它是最流行的 ORM 框架,而 JPA 是一个定义规范的 API。Hibernate 理解我们在对象和表之间添加的映射。它确保根据映射从数据库中检索/存储数据。它还在 JPA 之上提供了附加功能。

Spring Boot JPA 示例

在此示例中,我们将使用 spring-boot-starter-data-jpa 依赖项创建与 H2 数据库的连接。

步骤 1:打开 Spring Initializr https://start.spring.io/。

步骤 2: 提供 Group 名称。我们提供了 com.javatpoint

步骤 3:提供 Artifact ID。我们提供了 spring-boot-jpa-example。

步骤 4:添加依赖项:Spring Web、Spring Data JPAH2 Database。

步骤 5:单击生成按钮。当我们单击生成按钮时,它将项目打包为 Jar 文件并下载到本地系统。

Spring Boot Starter Data JPA

步骤 6:解压 Jar 文件并将其粘贴到 STS 工作区。

步骤 7:导入项目文件夹到 STS。

文件 -> 导入 -> 现有 Maven 项目 -> 浏览 -> 选择文件夹 spring-boot-jpa-example -> 完成

它需要一些时间来导入。

步骤 8:在文件夹 src/main/java 中创建一个名为 com.javatpoint.controller 的包。

步骤 9:在包 com.javatpoint.controller 中创建一个名为 ControllerDemo 的控制器类。

ControllerDemo.java

步骤 10:在文件夹 src/main/java 中创建另一个名为 com.javatpoint.model 的包。

步骤 11:在包 com.javatpoint.model 中创建一个名为 User 的类。

User.java

现在我们需要配置 H2 数据库。 

步骤 12:打开 application.properties 文件并配置以下内容:端口、启用 H2 控制台、数据源URL。

application.properties

步骤 13:在文件夹 src/main/resources 中创建一个 SQL 文件。

右键单击文件夹 src/main/resources -> 新建 -> 文件 -> 提供文件名 -> 完成

我们提供了文件名 data.sql 并将以下数据插入其中。

data.sql

步骤 14:src 文件夹中创建一个名为 webapp 的文件夹。

步骤 15:创建一个 JSP 文件,其名称与我们在 ControllerDemo 中返回的名称相同。在 ControllerDemo.java 中,我们返回了 home.jsp

home.jsp

步骤 16:运行 SpringBootJpaExampleApplication.java 文件。我们可以在控制台中看到我们的应用程序已成功在端口 8085 上运行。

Spring Boot Starter Data JPA

步骤 17:打开浏览器并调用 URL https://:8085/h2-console/。它显示了我们在 application.properties 文件中配置的 Driver Class、JDBC URL 和默认用户名为 sa。

Spring Boot Starter Data JPA

我们还可以通过单击测试连接按钮来测试连接。如果连接成功,它会显示一条消息“测试成功”。

步骤 18:单击连接按钮。它显示了我们在 User.java 中定义的表 userdata 的结构。

Spring Boot Starter Data JPA

步骤 19:执行以下查询以查看我们已插入到 data.sql 文件中的数据。


Spring Boot Starter Data JPA