JPA 实体管理 JPA ORM组件 JPA安装 本章将向您介绍JPA的一个简单示例。让我们以员工管理为例。这意味着员工管理正在创建,更新,查找和删除员工。如上所述,我们使用MySQL数据库进行数据库操作。 这个例子的主要模块如下: 模型或POJO Employee.java 持久化 Persistence.xml Service CreatingEmployee.java UpdatingEmployee.java FindingEmployee.java DeletingEmployee.java 让我们来看看我们在使用Eclipselink安装JPA时使用的包层次结构。按照以下示例的层次结构进行操作: 创建实体 实体只是bean或模型,在这个例子中,我们将使用Employee作为实体。eid,ename,salary和deg是这个实体的属性。它包含这些属性的默认构造函数,setter和getter方法。 在上面显示的层次结构中,在'src'(Source)包下创建一个名为'com.CodingDict.eclipselink.entity'的包。在给定的包下创建一个名为Employee.java的类,如下所示: package com.CodingDict.eclipselink.entity; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table public class Employee { @Id @GeneratedValue(strategy = GenerationType.AUTO) private int eid; private String ename; private double salary; private String deg; public Employee(int eid, String ename, double salary, String deg) { super( ); this.eid = eid; this.ename = ename; this.salary = salary; this.deg = deg; } public Employee( ) { super(); } public int getEid( ) { return eid; } public void setEid(int eid) { this.eid = eid; } public String getEname( ) { return ename; } public void setEname(String ename) { this.ename = ename; } public double getSalary( ) { return salary; } public void setSalary(double salary) { this.salary = salary; } public String getDeg( ) { return deg; } public void setDeg(String deg) { this.deg = deg; } @Override public String toString() { return "Employee [eid=" + eid + ", ename=" + ename + ", salary=" + salary + ", deg=" + deg + "]"; } } 在上面的代码中,我们使用了@Entity注释来使这个POJO类成为实体。在进入下一个模块之前,我们需要为关系实体创建数据库,该数据库将在persistence.xml文件中注册数据库。打开MySQL工作台并输入查询如下: create database jpadb use jpadb persistence.xml 该模块在JPA的概念中起着至关重要的作用。在这个xml文件中,我们将注册数据库并指定实体类。在上面显示的包层次结构中,JPA Content包下的persistence.xml如下所示: <?xml version="1.0" encoding="UTF-8"?> <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> <persistence-unit name="Eclipselink_JPA" transaction-type="RESOURCE_LOCAL"> <class>com.CodingDict.eclipselink.entity.Employee</class> <properties> <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/jpadb"/> <property name="javax.persistence.jdbc.user" value="root"/> <property name="javax.persistence.jdbc.password" value="root"/> <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> <property name="eclipselink.logging.level" value="FINE"/> <property name="eclipselink.ddl-generation" value="create-tables"/> </properties> </persistence-unit> </persistence> 在上面的xml中,<persistence-unit>标记是使用JPA持久性的特定名称定义的。<class>标记用包名称定义实体类。<properties>标签定义了所有的属性,<property>标签定义了每个属性,例如数据库注册,URL规范,用户名和密码。这些是Eclipselink属性。该文件将配置数据库。 持久性操作 持久性操作用于数据库,它们是加载和存储操作。在一个业务组件中,所有的持久化操作都属于服务类。 在上面显示的包层次结构中,在'src'(source)包下创建一个名为'com.CodingDict.eclipselink.service'的包。所有名为CreateEmloyee.java,UpdateEmployee.java,FindEmployee.java和DeleteEmployee.java的服务类。根据给定的包装如下: 创建员工 创建一个名为CreateEmployee.java的Employee类,如下所示: package com.CodingDict.eclipselink.service; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import com.CodingDict.eclipselink.entity.Employee; public class CreateEmployee { public static void main( String[ ] args ) { EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" ); EntityManager entitymanager = emfactory.createEntityManager( ); entitymanager.getTransaction( ).begin( ); Employee employee = new Employee( ); employee.setEid( 1201 ); employee.setEname( "Gopal" ); employee.setSalary( 40000 ); employee.setDeg( "Technical Manager" ); entitymanager.persist( employee ); entitymanager.getTransaction( ).commit( ); entitymanager.close( ); emfactory.close( ); } } 在上面的代码中,createEntityManagerFactory()通过提供我们在persistent.xml文件中为persistence-unit提供的相同唯一名称创建了一个持久性单元。entitymanagerfactory对象将使用createEntityManager()方法创建entitymanger实例。entitymanager对象为事务管理创建entitytransaction实例。通过使用entitymanager对象,我们可以将实体持久化到数据库中。 在编译和执行上述程序之后,您将从eclipse IDE的控制台面板上的eclipselink库中收到通知。 要获得结果,请打开MySQL工作台并键入以下查询。 use jpadb select * from employee 受影响的名为employee的数据库表将以表格格式显示如下: Eid Ename Salary Deg 1201 Gopal 40000 Technical Manager 更新员工 要更新一名员工,我们需要获取记录表格数据库,进行更改并最终进行处理。名为UpdateEmployee.java的类如下所示: package com.CodingDict.eclipselink.service; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import com.CodingDict.eclipselink.entity.Employee; public class UpdateEmployee { public static void main( String[ ] args ) { EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" ); EntityManager entitymanager = emfactory.createEntityManager( ); entitymanager.getTransaction( ).begin( ); Employee employee = entitymanager.find( Employee.class, 1201 ); //before update System.out.println( employee ); employee.setSalary( 46000 ); entitymanager.getTransaction( ).commit( ); //after update System.out.println( employee ); entitymanager.close(); emfactory.close(); } } 编译并执行上述程序后,您将在eclipse IDE的控制台面板上收到来自Eclipselink库的通知。要获得结果,请打开MySQL工作台并键入以下查询。 use jpadb select * from employee 受影响的名为employee的数据库表将以表格格式显示如下: Eid Ename Salary Deg 1201 Gopal 46000 Technical Manager 员工的工资1201更新为46000。 查找员工 要找到一名员工,我们将从数据库中获取记录并显示它。在这个操作中,EntityTransaction不涉及在检索记录时不应用任何事务。该类名为FindEmployee.java,如下所示。 package com.CodingDict.eclipselink.service; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import com.CodingDict.eclipselink.entity.Employee; public class FindEmployee { public static void main( String[ ] args ) { EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" ); EntityManager entitymanager = emfactory.createEntityManager(); Employee employee = entitymanager.find( Employee.class, 1201 ); System.out.println("employee ID = " + employee.getEid( )); System.out.println("employee NAME = " + employee.getEname( )); System.out.println("employee SALARY = " + employee.getSalary( )); System.out.println("employee DESIGNATION = " + employee.getDeg( )); } } 在编译和执行上述程序之后,您将从eclipse IDE的控制台面板上的Eclipselink库获得输出,如下所示: employee ID = 1201 employee NAME = Gopal employee SALARY = 46000.0 employee DESIGNATION = Technical Manager 删除员工 要删除员工,首先我们会找到该记录,然后将其删除。这里的EntityTransaction起着重要的作用。名为DeleteEmployee.java的类如下所示: package com.CodingDict.eclipselink.service; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import com.CodingDict.eclipselink.entity.Employee; public class DeleteEmployee { public static void main( String[ ] args ) { EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" ); EntityManager entitymanager = emfactory.createEntityManager( ); entitymanager.getTransaction( ).begin( ); Employee employee = entitymanager.find( Employee.class, 1201 ); entitymanager.remove( employee ); entitymanager.getTransaction( ).commit( ); entitymanager.close( ); emfactory.close( ); } } 编译并执行上述程序后,您将在eclipse IDE的控制台面板上收到来自Eclipselink库的通知。要获得结果,请打开MySQL工作台并键入以下查询。 use jpadb select * from employee 受影响的名为employee的数据库将具有空记录。在完成本例中的所有模块后,包和文件层次结构如下所示: JPA ORM组件 JPA安装