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
文件定义,其中包含数据库连接、实体类列表和其他持久化提供者(如 Hibernate 或 EclipseLink)的设置。
<!-- 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 样板代码的项目。