本章将向您介绍JPA的简单示例.让我们以员工管理为例.这意味着员工管理层正在创建,更新,查找和删除员工.如上所述,我们使用MySQL数据库进行数据库操作.
此示例的主要模块如下:
模型或POJO
Employee.java
持久性
Persistence.xml
服务
CreatingEmployee.java
UpdatingEmployee.java
FindingEmployee.java
DeletingEmployee.java
让我们使用Eclipselink获取我们在JPA安装中使用的包层次结构.按照以下示例的层次结构进行操作:
创建实体
实体只是bean或Models,在本例中我们将使用 Employee 作为实体. eid,ename,salary,和 deg 是此实体的属性.它包含这些属性的默认构造函数,setter和getter方法.
在上面显示的层次结构中,创建一个名为'com.it1352.eclipselink.entity'的包,在'src'(源)包下.在给定的包下创建一个名为 Employee.java 的类,如下所示:
package com.it1352.eclipselink.entity ; import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.Table;@Entity@Tablepublic 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 jpadbuse jpadb
Persistence.xml
此模块在JPA概念中起着至关重要的作用.在这个xml文件中,我们将注册数据库并指定实体类.
在上面显示的包层次结构中,JPA Content包下的persistence.xml如下:
com.IT屋.eclipselink.entity.Employee
在上面的xml中,< persistence-unit> tag是使用JPA持久性的特定名称定义的. < class> tag定义具有包名称的实体类. < properties> tag定义所有属性,< property> tag定义每个属性,例如数据库注册,URL规范,用户名和密码.这些是Eclipselink属性.此文件将配置数据库.
持久性操作
持久性操作用于数据库,它们加载和存储操作.在业务组件中,所有持久性操作都属于服务类.
在上面显示的包层次结构中,创建一个名为'com.it1352.eclipselink.service'的包,在'src'(源)包下.所有服务类都命名为CreateEmloyee.java,UpdateEmployee.java,FindEmployee.java和DeleteEmployee.java.在给定的包下面如下:
创建员工
创建一个名为 CreateEmployee.java 的Employee类,如下所示:
package com.it1352.eclipselink.service; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import com.it1352.eclipselink.entity.Employee; 公共类CreateEmployee { public static void main(String [] args){ EntityManagerFactory emfactory = Persistence.createEntityManagerFactory("Eclipselink_JPA") ; EntityManager entitymanager = emfactory.createEntityManager(); entitymanager.getTransaction().bind(); 员工员工=新员工(); employee.setEid(1201); employee.setEname("Gopal"); employee.setSalary(40000); employee.setDeg("技术经理"); entitymanager.persist(employee); entitymanager.getTransaction().commit(); entitymanager.close(); emfactory.close(); } }
在上面的代码中, createEntityManagerFactory()通过提供以下内容创建一个持久性单元我们在persistent.xml文件中为持久性单元提供的相同唯一名称. entitymanagerfactory对象将使用 createEntityManager()方法创建实体管理器实例. entitymanager对象为事务管理创建entitytransaction实例.通过使用entitymanager对象,我们可以将实体持久化到数据库中.
在编译和执行上述程序之后,您将从eclipse IDE的控制台面板上的eclipselink库获得通知.
结果,打开MySQL工作台并输入以下查询.
使用jpadb select * from employee
名为 employee 的受影响数据库表格将以表格格式显示如下:
Eid | Ename | 薪水 | Deg |
---|---|---|---|
1201 | Gopal | 40000 | 技术经理 |
更新员工
要更新员工,我们需要获取记录表单数据库,进行更改并最终提交.名为 UpdateEmployee.java 的类如下所示:
import javax.persistence.EntityManager;import javax.persistence.EntityManagerFactory;import javax.persistence.Persistence;import com.IT屋.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( ); }}
编译并执行上述程序后,您将在eclipse IDE的控制台面板上收到Eclipselink库的通知.
结果,打开MySQL工作台并输入以下查询.
use jpadbselect * from employee
受影响的数据库表 employee 将以表格格式显示如下:
Eid | Ename | 薪水 | Deg |
---|---|---|---|
1201 | Gopal | 46000 | 技术经理 |
员工的工资,1201更新为46000.
查找员工
查找员工我们将获得从数据库记录并显示它.在此操作中,EntityTransaction不涉及在检索记录时未应用任何事务.
名为 FindEmployee.java 的类如下所示.
package com.it1352.eclipselink.service; import javax.persistence.EntityManager;import javax.persistence.EntityManagerFactory;import javax.persistence.Persistence;import com.IT屋.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 = 1201employee NAME = Gopalemployee SALARY = 46000.0employee DESIGNATION = Technical Manager
删除员工
要删除员工,首先我们会找到该记录然后将其删除.这里EntityTransaction扮演着重要角色.
名为 DeleteEmployee.java 的类如下:
package com.it1352.eclipselink.service; import javax.persistence.EntityManager;import javax.persistence.EntityManagerFactory;import javax.persistence.Persistence;import com.IT屋.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 jpadbselect * from employee
名为 employee 的受影响数据库将具有空记录.
在此示例中完成所有模块之后,包和文件层次结构如下所示: