一、概述
Persistence-API是Java EE的规范标准之一。
它定义了一种标准的ORM(Object-Relational Mapping)模型,使得Java开发人员可以通过简单的API来与关系性数据库进行交互,而无需关注特定的数据库厂商的实现细节。
ORM技术的出现是为了解决面向对象编程和关系数据库存储之间的映射问题。
简言之,这个标准次要把关系型数据库(Relational Database,RDB)中的表数据映射成Java对象,让开发人员可以操作Java对象,而不用担心查询和存储数据在数据库中时的问题。
二、Entity
在Persistence-API中,一个Entity就代表一个Java对象(POJO),这个对象的属性映射到数据库表中的列。
在Entity类上使用@Entity注解来指定这个类是个Entity,@Table注解来指定这个实体对应的表名。
下面是一个简单的实体类的例子:
@Entity
@Table(name = "employee")
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String name;
private Integer age;
// 省略getter/setter方法
}
在这个例子中,@Id注解表示这个属性是实体类的主键;@GeneratedValue注解表示这个属性的值是自动生成的,生成策略是IDENTITY;
三、EntityManager
EntityManager是Persistence-API操作Entity的核心API,它提供了标准的CRUD操作,例如:find、persist、remove、merge、createQuery等。
在使用EntityManager之前,需要先通过实体管理工厂(EntityManagerFactory)创建EntityManager。一个EntityManagerFactory代表一个数据源。
下面是如何获取EntityManager的例子:
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("example-unit");
EntityManager entityManager = entityManagerFactory.createEntityManager();
其中,”example-unit”是配置文件persistence.xml中的持久化单元名称。
通过entityManager,可以进行各种CRUD操作,例如:
// 查找Employee表中id为1的记录
Employee employee = entityManager.find(Employee.class, 1);
// 将实体对象employee添加进数据库
entityManager.persist(employee);
// 删除实体对象employee
entityManager.remove(employee);
// 更新实体对象employee
employee.setName("Tom");
entityManager.merge(employee);
// 根据HQL语句查询Employee对象列表
List<Employee> employeeList = entityManager.createQuery("FROM Employee", Employee.class).getResultList();
四、事务控制
由于EntityManager中对数据库的操作都需要依赖事务,所以在进行持久化操作时需要对事务进行控制。
默认情况下,EntityManager的事务是自动提交的,也就是每进行一次操作就会自动提交一次。为了更好地控制事务,应该手动控制事务的开启、提交和回滚。
下面是一个使用EntityManager进行事务控制的例子:
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("example-unit");
EntityManager entityManager = entityManagerFactory.createEntityManager();
// 开启事务
entityManager.getTransaction().begin();
// 执行持久化操作
Employee employee = new Employee();
employee.setName("Tom");
entityManager.persist(employee);
// 提交事务
entityManager.getTransaction().commit();
// 关闭EntityManager
entityManager.close();
// 关闭EntityManagerFactory
entityManagerFactory.close();
五、JPQL
JPQL(Java Persistence Query Language)是一种面向对象的查询语言,用于实现Object/Relational Mapping。它类似于SQL语句,但是它是面向对象的。
JPQL是由Persistence-API定义和规范,它不属于任何特定的实现,所以可以跨不同的关系型数据库使用。
JPQL支持SELECT、UPDATE、DELETE等语句。下面是一个JPQL查询例子:
List<Employee> resultList = entityManager
.createQuery("SELECT e FROM Employee e WHERE e.age > :age", Employee.class)
.setParameter("age", 30)
.getResultList();
使用@Entity注解指定一个类是Entity,使用@Table注解指定一个Entity对应的表。使用EntityManager进行CRUD操作,通过手动控制事务来更好地控制数据的操作。
以上就是本文对Persistence-API的详细阐述。通过学习本文,相信你已经对Java EE中的ORM规范有了进一步的了解。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/269863.html