源码先锋

源码先锋

JPA 实体管理器

admin 199 195

我们使用实体管理器将实体持久化到数据库。

创建实体管理器

所有实体管理器都来自类型的工厂。

以下示例演示为名为“EmployeeService”的持久性单元创建一个EntityManagerFactory:

EntityManagerFactoryemf=("EmployeeService");

以下示例演示如何在上一个示例中获取的工厂创建实体管理器:

EntityManagerem=();

保存实体

我们使用实体管理器来持久化Employee的实例。

Employeeemp=newEmployee(158);(emp);

以下代码显示如何在创建新员工并将其保留到数据库的方法中使用EntityManager。

publicEmployeecreateEmployee(intid,Stringname,longsalary){Employeeemp=newEmployee(id);(name);(salary);(emp);returnemp;}

查找实体

一旦实体在数据库中,下一行代码显示如何找到它。

Employeeemp=(,1);

删除实体

要从数据库中删除实体,请从EntityManager调用remove方法。

Employeeemp=(,1);(emp);

更新实体

要更新实体,我们可以在被管实体上调用setter方法。被管实体是从EntityManager返回的实体。

Employeeemp=(,1);("newName");

事务

以下代码显示如何启动和提交事务。

().begin();Employeeemp=newEmployee(158);(emp);().commit();

查询

在JPA中,有一种称为Java持久性查询语言(JPQL)的新的查询语言。

以下示例显示如何创建动态查询,然后执行它以获取数据库中的所有员工。

TypedQueryEmployeequery=("SELECTeFROMEmployeee",);ListEmployeeemps=();

我们通过在EntityManager上发出createQuery()调用并传入JPQL字符串来创建一个TypedQueryEmployee对象。

JPQL字符串不是指EMPLOYEE数据库表,而是Employee实体。

例子

以下代码显示了一个简单的完全功能类,可用于对Employee实体发出典型的创建,读取,更新和删除(CRUD)操作。

;;;publicclassEmployeeService{protectedEntityManagerem;publicEmployeeService(EntityManagerem){=em;}publicEmployeecreateEmployee(intid,Stringname,longsalary){Employeeemp=newEmployee(id);(name);(salary);(emp);returnemp;}publicvoidremoveEmployee(intid){Employeeemp=findEmployee(id);if(emp!=null){(emp);}}publicEmployeeraiseEmployeeSalary(intid,longraise){Employeeemp=(,id);if(emp!=null){(()+raise);}returnemp;}publicEmployeefindEmployee(intid){(,id);}publicListEmployeefindAllEmployees(){TypedQueryEmployeequery=("SELECTeFROMEmployeee",);();}}

主类

;;;;publicclassMain{publicstaticvoidmain(String[]args){EntityManagerFactoryemf=("EmployeeService");EntityManagerem=();EmployeeServiceservice=newEmployeeService(em);().begin();Employeeemp=(1,"Tom",5000);().commit();("Persisted"+emp);emp=(1);("Found"+emp);ListEmployeeemps=();for(Employeee:emps)("Foundemployee:"+e);().begin();emp=(1,1000);().commit();("Updated"+emp);().begin();(158);().commit();("RemovedEmployee158");();();}}

持久性单元

描述持久性单元的配置在名为的XML文件中定义。

每个持久性单元都被命名。单个文件可以包含一个或多个命名的持久性单元配置。

以下代码显示了文件的演示

persistencepersistence-unitname="EmployeeService"transaction-type="RESOURCE_LOCAL"propertiespropertyname=""value=""/propertyname=""value="jdbc:derby://localhost:1527/EmpServDB;create=true"/propertyname=""value="APP"/propertyname=""value="APP"//properties/persistence-unit/persistence

文件应放在META-INF目录中。