📅  最后修改于: 2020-11-13 05:03:24             🧑  作者: Mango
本章将为您介绍有关JPA的简单示例。让我们以员工管理为例。这意味着员工管理正在创建,更新,查找和删除员工。如上所述,我们使用MySQL数据库进行数据库操作。
此示例的主要模块如下:
型号或POJO
Employee.java
坚持不懈
Persistence.xml
服务
CreationEmployee.java
更新Employee.java
FindingEmployee.java
删除Employee.java
让我们采用在Eclipselink的JPA安装中使用的包层次结构。遵循此示例的层次结构,如下所示:
实体不过是bean或模型,在此示例中,我们将使用Employee作为实体。 eid,ename,salary和deg是该实体的属性。它包含这些属性的默认构造函数,setter和getter方法。
在上面显示的层次结构中,在“ src” (源)包下创建一个名为“ com.tutorialspoint.eclipselink.entity”的包。在给定的包下创建一个名为Employee.java的类,如下所示:
package com.tutorialspoint.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
该模块在JPA的概念中起着至关重要的作用。在这个xml文件中,我们将注册数据库并指定实体类。
在上面显示的包层次结构中,JPA Content包下的persistence.xml如下:
com.tutorialspoint.eclipselink.entity.Employee
在上面的xml中,
持久性操作用于数据库,它们是加载和存储操作。在业务组件中,所有持久性操作都属于服务类。
在上面显示的包层次结构中,在“ src” (源)包下创建一个名为“ com.tutorialspoint.eclipselink.service”的包。所有名为CreateEmloyee.java,UpdateEmployee.java,FindEmployee.java和DeleteEmployee.java的服务类。包含在给定的程序包中,如下所示:
创建一个名为CreateEmployee.java的Employee类,如下所示:
package com.tutorialspoint.eclipselink.service;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import com.tutorialspoint.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提供的唯一名称相同的名称来创建一个persistence单元。实体管理工厂对象将通过使用createEntityManager()方法创建entitymanger实例。实体管理器对象创建用于事务管理的实体事务实例。通过使用entitymanager对象,我们可以将实体持久化到数据库中。
编译并执行上述程序后,您将从eclipse IDE控制台面板上的eclipselink库中收到通知。
为了获得结果,请打开MySQL工作台并键入以下查询。
use jpadb
select * from employee
受影响的名为employee的数据库表将以表格格式显示,如下所示:
Eid | Ename | Salary | Deg |
---|---|---|---|
1201 | Gopal | 40000 | Technical Manager |
要更新员工,我们需要获取记录表单数据库,进行更改,最后提交它。名为UpdateEmployee.java的类如下所示:
package com.tutorialspoint.eclipselink.service;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import com.tutorialspoint.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.tutorialspoint.eclipselink.service;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import com.tutorialspoint.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.tutorialspoint.eclipselink.service;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import com.tutorialspoint.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的数据库将具有空记录。
完成本示例中的所有模块后,软件包和文件的层次结构如下所示: