我们使用实体管理器将实体持久化到数据库。
创建实体管理器
所有实体管理器都来自类型的工厂。
以下示例演示为名为“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目录中。





