📜  Java – JPA 与 Hibernate(1)

📅  最后修改于: 2023-12-03 15:31:32.930000             🧑  作者: Mango

Java – JPA 与 Hibernate

介绍

Java Persistence API (JPA) 是一种用于处理 Java 对象和关系数据库之间映射的 API。它提供了一种标准的方式来映射 Java 对象和关系数据库中的表,避免了开发人员手动处理 SQL 语句和结果集的繁琐工作。

Hibernate 是一个流行的开源 ORM(对象关系映射)框架,它实现了 JPA API,同时也提供了一些独有的功能。它可以与各种关系数据库进行交互,从而帮助开发人员更轻松地访问和操作数据。Hibernate 还提供了一个具有高度可定制性的查询语言 HQL,它可以查询 Java 对象而不是直接使用 SQL。

使用 JPA 和 Hibernate
配置 JPA

在使用 JPA 时,需要在项目中添加以下依赖项:

<dependency>
  <groupId>javax.persistence</groupId>
  <artifactId>persistence-api</artifactId>
  <version>2.2</version>
</dependency>

同时还需要在项目中配置一个 persistence.xml 文件。该文件应该被放置在 META-INF 目录下,其内容应如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.2" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd">
  <persistence-unit name="my_persistence_unit" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    <class>com.example.User</class>
    <properties>
      <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
      <property name="hibernate.connection.url" value="jdbc:mysql://localhost/mydb"/>
      <property name="hibernate.connection.username" value="user"/>
      <property name="hibernate.connection.password" value="password"/>
      <property name="hibernate.hbm2ddl.auto" value="update"/>
    </properties>
  </persistence-unit>
</persistence>

其中,persistence-unit 元素的 name 属性应该设置为你自己的持久化单元名称,这个名称将在代码中进行引用。provider 元素应该指定为 org.hibernate.jpa.HibernatePersistenceProvider,用于指定使用 Hibernate 作为 JPA 实现。class 元素应该指定实体类的全限定名,可以有多个 class 元素,它们都会被包含到该持久化单元中。properties 元素可以用来指定 Hibernate 的配置,比如数据库类型、用户名、密码等。

配置 Hibernate

Spring Boot 的 Hibernate Starter 可以让我们更方便地使用 Hibernate。我们只需要在 pom.xml 中添加以下依赖项:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
</dependency>

然后在 application.properties 中进行配置:

spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:mysql://localhost/mydb
spring.datasource.username=user
spring.datasource.password=password

如此一来,我们就可以开始使用 Hibernate 了。在我们的代码中,只需要定义实体类并标注它们与数据库中哪个表相对应即可。

@Entity
@Table(name = "users")
public class User {
  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private Long id;

  @Column(name = "name")
  private String name;

  @Column(name = "email")
  private String email;

  // 省略 getter 和 setter
}

然后我们就可以在我们的代码中使用 JPA 的 EntityManager 对象来保存和查询数据了。

@Repository
public class UserRepository {
  @PersistenceContext
  private EntityManager entityManager;

  public User save(User user) {
    entityManager.persist(user);
    return user;
  }

  public User findById(Long id) {
    return entityManager.find(User.class, id);
  }

  public void deleteById(Long id) {
    User user = findById(id);
    entityManager.remove(user);
  }
}
结论

Hibernate 是一个功能强大的 ORM 框架,提供了很多有用的功能,能够轻松实现 Java 对象与数据库表之间的映射。同时,使用 JPA 可以帮助开发人员更好地遵循标准,相较于直接使用 Hibernate API 更加简洁。虽然在使用 Hibernate 时有一些细节需要注意,但总体而言,它可以大大提高应用程序的开发速度和效率。