Quarkus和Hibernate入门 - thorben


Quarkus 项目使您能够开发基于 Java 和大量完善的基于 Java 的框架的 Kubernetes 原生应用程序。Hibernate 当然是这些框架之一。
但该项目不仅使您能够以极快的启动时间和非常小的内存占用构建本机应用程序。它还提供了一系列可用性功能,使我们作为开发人员的工作更轻松。与在标准 Java SE 或 Jakarta EE 应用程序中使用 Hibernate 相比,没有太大区别。
 
在开始实现域模型之前,您需要创建一个应用程序并添加所需的依赖项。最简单的方法是使用https://code.quarkus.io/ 上的交互式项目生成器。它使您能够指定项目的元数据并选择所需的依赖项。如果要使用 Hibernate,请确保选择“Hibernate ORM”和首选数据库的 JDBC 驱动程序。然后根据这些信息生成一个项目并将其作为可下载的存档提供。
或配置Maven:

<!-- Hibernate ORM  --><font></font>
<dependency><font></font>
  <groupId>io.quarkus</groupId><font></font>
  <artifactId>quarkus-hibernate-orm</artifactId><font></font>
</dependency><font></font>
<font></font>
<!-- JDBC driver dependencies --><font></font>
<dependency><font></font>
  <groupId>io.quarkus</groupId><font></font>
  <artifactId>quarkus-jdbc-postgresql</artifactId><font></font>
</dependency>
 

创建项目并添加所需的依赖项后,就可以配置 Hibernate。这比 Java SE 或 Jakarta EE 应用程序花费的工作量要少得多。您不需要创建一个persistence.xml 文件并从现有项目中复制几行标准配置。Quarkus 根据您添加到项目中的依赖项和一组智能默认值为您生成。
但是您仍然需要配置一些东西,例如到您的数据库的连接,如果 Hibernate生成数据库模式,以及您的应用程序的日志记录。您可以在 application.properties 文件中配置所有这些。
# datasource configuration
quarkus.datasource.username = postgres
quarkus.datasource.password = postgres
quarkus.datasource.jdbc.url = jdbc:postgresql://localhost:5432/test
<font></font>
# drop and create the database at startup
quarkus.hibernate-orm.database.generation=drop-and-create
quarkus.hibernate-orm.sql-load-script=data.sql

Quarkus 支持的配置属性
这是最重要的配置属性的列表。您可以在Quarkus 文档 中找到完整列表。
  • quarkus.datasource.username / quarkus.datasource.passwordQuarkus 用于连接到您的数据库的用户名和密码。
  • quarkus.datasource.jdbc.urlQuarkus 用于连接数据库的JDBC URL。Hibernate 会自动选择匹配的方言,但在运行时需要匹配的 JDBC 驱动程序。
  • quarkus.hibernate-orm.database.default-schemaHibernate 将所有数据库对象映射到的默认数据库模式。
  • quarkus.hibernate-orm.physical-naming-strategy / quarkus.hibernate-orm.implicit-naming-strategy  Quarkus 用于将实体类和属性映射到数据库表和列的命名策略
  • quarkus.hibernate-orm.second-level-caching-enabled激活或停用 Hibernate 的二级缓存。默认情况下它是激活的,您只需要在实体映射中激活缓存。
  • quarkus.hibernate-orm.statistics / quarkus.hibernate-orm.metrics.enabled如果 Hibernate 的统计组件被激活并且它们是使用度量扩展发布的(默认值:false)。
  • quarkus.hibernate-orm.log.sql / quarkus.hibernate-orm.log.format-sql / quarkus.hibernate-orm.log.bind-parameters如果 Hibernate 应该记录 SQL 语句,格式化它们,并包括绑定参数值。

 
实体:
@Entity
public class ChessPlayer {
 
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "player_seq")
    @SequenceGenerator(name = "player_seq", sequenceName = "player_seq")
    private Long id;
 
    private String firstName;
 
    private String lastName;
 
    private LocalDate birthDate;
 
    @Version
    private int version;
 
    ...
}

Hibernate使用数据库序列player_seq来生成唯一的主键值。属性firstName、lastName和birthDate被映射到具有相同名称的列。而 Hibernate 使用version属性通过应用乐观锁定算法来防止并发修改。
 
使用方式:
获取EntityManager实例:
@Inject
EntityManager entityManager;

您可以使用此EntityManager在业务代码中使用JPQLnative或 Criteria 查询读取实体或 DTO

List<ChessPlayer> chessPlayers = entityManager.createQuery("Select cp from ChessPlayer cp", ChessPlayer.class).getResultList();

您从数据库加载或为其调用persist方法的所有实体对象都处于生命周期状态 managed。Hibernate 会将它们包含在其脏检查中,并自动将所有更改刷新到数据库中。
ChessPlayer chessPlayer = new ChessPlayer();
chessPlayer.setFirstName("Thorben");
chessPlayer.setLastName("Janssen");
 
entityManager.persist(chessPlayer);