Logo
Section 1 / 8

Hibernate 和 JPA

学习如何使用 Quarkus 和 Hibernate 操作 SQL 数据库。

导入

Hibernate 和 JPA

学习如何使用 Quarkus 和 Hibernate 操作 SQL 数据库。

Jakarta Persistence API(JPA) 是 Java 的一项规范,用于将数据持久化到关系型数据库中。

Hibernate 是 JPA 规范的一个流行实现,也是最常用的 Java ORM(对象关系映射)工具,用于在不同数据库中查询和更新数据。

...

添加扩展依赖

要使用 SQL 数据库,我们需要添加几个依赖项。首先是 quarkus-hibernate-orm,即 Quarkus 的 Hibernate 扩展。其次是所选数据库的 JDBC 驱动。JDBC(Java 数据库连接)是 Java 编程语言的 API,定义了客户端如何访问数据库。Quarkus 提供了一系列扩展来支持不同类型的数据库,包括:

  • quarkus-jdbc-db2:用于 IBM DB2。
  • quarkus-jdbc-derby:用于 Apache Derby。
  • quarkus-jdbc-h2:用于 H2。
  • quarkus-jdbc-mariadb:用于 MariaDB。
  • quarkus-jdbc-mssql:用于 Microsoft SQL Server。
  • quarkus-jdbc-mysql:用于 MySQL。
  • quarkus-jdbc-oracle:用于 Oracle 数据库。
  • quarkus-jdbc-postgresql:用于 PostgreSQL。

注意: 在本课程后续内容中,我们将使用 H2 作为 SQL 数据库。

添加依赖后,我们的 pom.xml(或 build.gradle)文件中应包含以下新内容。

1<!-- Hibernate ORM 特定依赖 --> 2<dependency> 3 <groupId>io.quarkus</groupId> 4 <artifactId>quarkus-hibernate-orm</artifactId> 5</dependency> 6 7<!-- JDBC 驱动依赖 --> 8<dependency> 9 <groupId>io.quarkus</groupId> 10 <artifactId>quarkus-jdbc-h2</artifactId> 11</dependency>

添加实体类

在操作数据库时,实体代表一个单一的数据对象。在 SQL 数据库中,每个实体通常对应一张表。

为了方便创建实体,我们可以使用 @Entity 注解来定义每个对象。

1package io.educative; 2 3import javax.persistence.Entity; 4import javax.persistence.GeneratedValue; 5import javax.persistence.Id; 6 7@Entity 8public class Todo { 9 @Id 10 @GeneratedValue 11 public Long id; 12 13 public Boolean status; 14 public String message; 15 16 public Todo() { 17 } 18 19 public Todo(Boolean status, String message) { 20 this.status = status; 21 this.message = message; 22 } 23}

在上述示例中,我们首先在第 7 行使用 @Entity 注解定义了一个新的实体。接着,在第 9 至 11 行定义了一个自动生成的 ID。最后,在第 13 和 14 行为 Todo 实体添加了两个属性。

配置与测试

借助一些注解和提供的方法,可以轻松地在 Quarkus 中使用 Hibernate 和 JPA。

下面的代码展示了一个简单的应用程序,用于处理待办事项。

No configuration found for ID: efb6f8eb4ce54e7a973b2a1db7f141f0084fb7c54c307dfe4feb1dc1e81cb0cc

启动应用后,我们可以尝试发送一些 POST 请求来添加几条待办事项。

可以使用上方终端运行以下命令:

注意: 要运行 curl 命令,请使用正在运行的应用程序的终端,并点击“+”按钮创建一个新的终端窗口。

1curl --location 'localhost:3000/todos' \ 2--header 'Content-Type: application/json' \ 3--data '{ 4 "status": false, 5 "message": "第一条待办事项" 6}'

执行命令后,可以在输出窗口中查看新增的待办事项。我们通过以下代码行使用 TodoService 将待办事项持久化并从数据库中获取:

  • 第 10–11 行: 注入实体管理器,稍后用于处理数据。
  • 第 14–15 行: 执行名为 Todo.findAll 的查询,该方法已在 Todo.java 中定义,用于返回所有待办事项列表。
  • 第 18–21 行: 使用实体管理器将新的待办事项添加到数据库中。

Quarkus Web

Quarkus Panache