什么是JPA(Java持久性API)?

JPA是Java中用于对象关系映射(ORM)的Java规范。JPA提供了一种将Java对象映射到数据库表的方法。这使程序员可以直接使用Java对象而不是执行数据库SQL查询来操纵数据库信息。

开发人员可以选择许多可用的JPA规范实现库之一,例如Hibernate,Apache OpenJPA和EclipseLink。EclipseLink是JPA规范的参考实现。在我们将在此网站上为您提供的示例中,Hibernate库将用作持久性提供程序。

在JPA中,我们将数据库表建模为Java对象。此Java对象也称为entity对象。该实体表示数据库中的表。数据库表中的单行将在实体的实例中表示。该实体对象保存有关对象与数据库表之间的映射的信息。可以使用注解或XML映射文件定义此信息或元数据。

这是实体对象及其元数据信息的简单示例。

package org.nhooo.example.jpa.entity;

import javax.persistence.*;
import java.io.Serializable;
import java.util.Objects;

@Entity
@Table(name = "genres")
public class Genre implements Serializable {
    private static final long serialVersionUID = 1L;

    private Long id;
    private String name;

    public Genre() {
    }

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public Long getId() {
        return id;
    }

    @Column(nullable = false, length = 50)
    public String getName() {
        return name;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Genre genre = (Genre) o;
        return Objects.equals(id, genre.id) &&
            Objects.equals(name, genre.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, name);
    }

    @Override
    public String toString() {
        return "Genre{" +
            "id=" + id +
            ", name='" + name + '\'' +
            '}';
    }
}

在该样品中实体上面我们使用注解如@Entity,@Table,@Id,@GeneratedValue和@Column。这些是可以用于对象映射的注解。

除了使用对象操作数据库表外,JPA还提供类似于SQL的查询,可用于创建静态或动态查询语句。

Maven依赖

<!-- https://search.maven.org/remotecontent?filepath=javax/persistence/javax.persistence-api/2.2/javax.persistence-api-2.2.jar -->
<dependency>
    <groupId>javax.persistence</groupId>
    <artifactId>javax.persistence-api</artifactId>
    <version>2.2</version>
</dependency>

Maven中央