- JPA 教程
- JPA - 首页
- JPA - 简介
- JPA - 架构
- JPA - ORM 组件
- JPA - 安装
- JPA - 实体管理器
- JPA - JPQL
- JPA - 高级映射
- JPA - 实体关系
- JPA - Criteria API
- JPA 有用资源
- JPA - 快速指南
- JPA - 有用资源
JPA - 实体管理器
本章将带您了解 JPA 的简单示例。让我们以员工管理为例。这意味着员工管理是创建、更新、查找和删除员工。如上所述,我们使用 MySQL 数据库进行数据库操作。
此示例的主要模块如下所示
模型或 POJO
Employee.java
持久化
Persistence.xml
服务
CreatingEmployee.java
UpdatingEmployee.java
FindingEmployee.java
DeletingEmployee.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
Persistence.xml
此模块在 JPA 的概念中起着至关重要的作用。在此 xml 文件中,我们将注册数据库并指定实体类。
在上面显示的包层次结构中,JPA 内容包下的 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.tutorialspoint.eclipselink.entity.Employee</class>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://: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’(源)包下创建一个名为‘com.tutorialspoint.eclipselink.service’的包。所有服务类,例如 CreateEmloyee.java、UpdateEmployee.java、FindEmployee.java 和 DeleteEmployee.java,都属于给定的包,如下所示
创建员工
创建一个名为CreateEmployee.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 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 | 技术经理 |
更新员工
要更新员工,我们需要从数据库中获取记录,进行更改,最后提交它。名为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 | 技术经理 |
员工 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,将包含空记录。
完成此示例中的所有模块后,包和文件层次结构如下所示