第二章 数据访问:JPA

学习目标

数据访问(Data Access)在Java Persistence API(JPA)中是一个核心概念,它允许你以面向对象的方式访问和操作数据库。JPA是Java EE 5规范的一部分,并在后续版本中得到了增强,如今它是许多Java应用程序中处理数据库交互的首选方式之一。JPA提供了一套标准API,用于数据持久化,而具体的实现则依赖于JPA提供者(如Hibernate, EclipseLink等)。

JPA的基本概念

  1. 实体(Entity):
    在JPA中,实体是持久化类的实例,它代表了数据库中的一行记录。实体类通过注解(如@Entity)标识,并且拥有映射到数据库表列的属性。
  2. 实体管理器(EntityManager):
    EntityManager是JPA中用于管理实体的接口。它提供了用于创建、查询、更新和删除实体的方法。EntityManager是线程绑定的,每个线程都应该有自己的EntityManager实例。
  3. 持久化上下文(Persistence Context):
    持久化上下文是EntityManager管理的一组实体实例。它代表了当前事务的工作单元,并且包含了实体的当前状态。当事务提交时,持久化上下文中的更改将被同步到数据库。
  4. 实体事务(Entity Transactions):
    JPA支持事务管理,允许你以声明式或编程式方式控制事务的边界。事务是确保数据库操作完整性和一致性的关键。
  5. JPQL(Java Persistence Query Language):
    JPQL是一种用于查询实体的高级查询语言。它类似于SQL,但操作的是实体和实体之间的关系,而不是数据库表和列。
  6. Criteria API:
    Criteria API是JPA 2.0引入的一种类型安全的查询API,它允许你以编程方式构建查询,而无需编写字符串形式的JPQL或SQL查询。
    JPA的数据访问流程
  7. 配置JPA提供者:
    在你的项目中配置JPA提供者(如Hibernate),这通常包括在pom.xml(对于Maven项目)中添加依赖项,以及配置persistence.xml文件。
  8. 定义实体类:
    使用JPA注解定义实体类,映射到数据库表。
  9. 使用EntityManager:
    获取EntityManager实例,并通过它来执行CRUD(创建、读取、更新、删除)操作。
  10. 查询数据:
    使用JPQL或Criteria API编写查询,并通过EntityManager执行这些查询来获取实体实例。
  11. 管理事务:
    控制事务的边界,确保数据的一致性和完整性。
  12. 关闭EntityManager:
    在操作完成后,关闭EntityManager以释放资源。
java 复制代码
java
import javax.persistence.EntityManager;  
import javax.persistence.EntityManagerFactory;  
import javax.persistence.Persistence;  
  
public class JpaExample {  
    public static void main(String[] args) {  
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("your-persistence-unit");  
        EntityManager em = emf.createEntityManager();  
  
        // 开始事务  
        em.getTransaction().begin();  
  
        // 这里可以添加代码来操作实体  
  
        // 提交事务  
        em.getTransaction().commit();  
  
        // 关闭EntityManager  
        em.close();  
        emf.close();  
    }  
}

注意:在实际应用中,通常会使用Spring Data JPA等框架来简化JPA的使用,这些框架提供了更高级的抽象,如Repository接口,可以进一步简化数据访问层的代码。

还待完善,

相关推荐
用户8307196840823 小时前
Spring Boot WebClient性能比RestTemplate高?看完秒懂!
java·spring boot
IvorySQL3 小时前
PostgreSQL 技术日报 (3月11日)|4库合一性能提升350倍与内核新讨论
数据库·postgresql·开源
IvorySQL3 小时前
谁动了我的查询结果?PostgreSQL 联表加锁的隐藏陷阱
数据库·postgresql·开源
爱可生开源社区6 小时前
🧪 你的大模型实验室开张啦!亲手测出最懂你 SQL 的 AI
数据库·sql·llm
赵渝强老师9 小时前
【赵渝强老师】使用TiSpark在Spark中访问TiDB
数据库·mysql·tidb·国产数据库
Qinana11 小时前
第一次用向量数据库!手搓《天龙八部》RAG助手,让AI真正“懂”你
前端·数据库·后端
DolphinDB1 天前
集成 Prometheus 与 DolphinDB 规则引擎,构建敏捷监控解决方案
数据库
IvorySQL1 天前
PostgreSQL 技术日报 (3月10日)|IIoT 性能瓶颈与内核优化新讨论
数据库·postgresql·开源
小飞Coding1 天前
Spring Boot 中关于 Bean 加载、实例化、初始化全生命周期的扩展点
spring boot
小飞Coding1 天前
彻底搞懂 Spring 容器导入配置类:@EnableXXX 与 spring.factories 核心原理
spring boot