一、概述
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/zh-tw/n/269863.html