跳转到内容

Java JPA

来自代码酷

Java Persistence API (JPA) 是 Java 平台的一个规范,用于管理关系型数据库中的对象持久化。它是 Java EE(现为 Jakarta EE)的一部分,但也可在 Java SE 环境中使用。JPA 提供了一种标准化的方式,将 Java 对象映射到数据库表(称为 ORM),简化了数据库操作并减少了样板代码。

核心概念[编辑 | 编辑源代码]

实体(Entity)[编辑 | 编辑源代码]

JPA 中的实体是一个轻量级的、可持久化的 Java 类,通常对应数据库中的一张表。实体类使用注解(如 @Entity)标记,并通过字段或方法映射到表的列。

  
import javax.persistence.Entity;  
import javax.persistence.Id;  

@Entity  
public class Student {  
    @Id  
    private Long id;  
    private String name;  
    private int age;  

    // Getters and setters  
}

持久化单元(Persistence Unit)[编辑 | 编辑源代码]

JPA 配置通过 persistence.xml 文件定义,其中包含数据库连接、实体类列表和其他持久化提供者(如 HibernateEclipseLink)的设置。

  
<!-- META-INF/persistence.xml -->  
<persistence-unit name="studentPU" transaction-type="RESOURCE_LOCAL">  
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>  
    <class>com.example.Student</class>  
    <properties>  
        <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/student_db"/>  
        <property name="javax.persistence.jdbc.user" value="root"/>  
        <property name="javax.persistence.jdbc.password" value="password"/>  
    </properties>  
</persistence-unit>

实体管理器(EntityManager)[编辑 | 编辑源代码]

EntityManager 是 JPA 的核心接口,用于管理实体生命周期(如创建、查询、更新、删除)。

  
import javax.persistence.EntityManager;  
import javax.persistence.EntityManagerFactory;  
import javax.persistence.Persistence;  

public class Main {  
    public static void main(String[] args) {  
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("studentPU");  
        EntityManager em = emf.createEntityManager();  

        em.getTransaction().begin();  
        Student student = new Student();  
        student.setId(1L);  
        student.setName("Alice");  
        student.setAge(20);  
        em.persist(student);  
        em.getTransaction().commit();  

        em.close();  
        emf.close();  
    }  
}

查询语言(JPQL)[编辑 | 编辑源代码]

JPA 提供了一种面向对象的查询语言(JPQL),类似于 SQL,但操作的是实体而非表。

  
// 查询所有年龄大于18的学生  
List<Student> students = em.createQuery(  
    "SELECT s FROM Student s WHERE s.age > 18", Student.class  
).getResultList();

关联关系[编辑 | 编辑源代码]

JPA 支持以下关联关系,通过注解定义:

  • @OneToOne
  • @OneToMany
  • @ManyToOne
  • @ManyToMany

示例(一对多关系):

  
@Entity  
public class Course {  
    @Id  
    private Long id;  

    @OneToMany(mappedBy = "course")  
    private List<Student> students;  
}

实际案例:学生管理系统[编辑 | 编辑源代码]

以下是一个完整的 JPA 应用示例,包含实体、查询和事务管理:

  
// 定义实体  
@Entity  
public class Student {  
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)  
    private Long id;  
    private String name;  
    // 其他字段和方法  
}  

// 主程序  
public class App {  
    public static void main(String[] args) {  
        EntityManager em = // 初始化 EntityManager  
        em.getTransaction().begin();  

        Student student = new Student();  
        student.setName("Bob");  
        em.persist(student);  

        List<Student> students = em.createQuery("SELECT s FROM Student s", Student.class)  
                                .getResultList();  
        students.forEach(s -> System.out.println(s.getName()));  

        em.getTransaction().commit();  
    }  
}

性能优化[编辑 | 编辑源代码]

  • 使用 @Cacheable 开启二级缓存。
  • 懒加载(fetch = FetchType.LAZY)关联关系以减少查询负载。
  • 批量操作(@BatchSize)优化大量数据查询。

总结[编辑 | 编辑源代码]

JPA 简化了 Java 应用程序与数据库的交互,通过 ORM 将对象映射到表,并提供标准化的 API(如 EntityManager 和 JPQL)。它是企业级应用开发的重要工具,尤其适合需要快速迭代和减少 SQL 样板代码的项目。

graph TD A[JPA] --> B[实体类] A --> C[EntityManager] A --> D[JPQL] B --> E[注解映射] C --> F[CRUD操作] D --> G[面向对象查询]