开源项目
知识点
相关文章
更多最近更新
更多JPA 增删改查入门示例
2019-04-22 23:30|来源: 网路
本章将使用一个简单的例子来说明JPA是如何工作的。让我们来考虑以员工管理为例。假设员工管理分别创建,更新,查找和删除员工的记录操作。正如前面提到的,使用MySQL数据库进行数据库操作。
对于此示例中的主要模块如下:
模型或POJO
Employee.java
持久化
Persistence.xml
服务
CreatingEmployee.java
UpdatingEmployee.java
FindingEmployee.java
DeletingEmployee.java
让我们看看,我们已经使用了JPA安装EclipseLink包的层次。按照分层结构的此示例中,如下所示:
创建实体
实体是什么?无非是bean或model。在这个例子中,我们将使用员工作为一个实体。 eid, ename, salary, 和deg是实体的属性。它包含一个默认的构造函数,以及这些属性的setter和getter方法。
在上图所示的层次结构,创建一个名为“cn.sxt.eclipselink.entity'包,在'src'中(源)封装。给包下创建一个名为Employee.java类,如下所示:
package cn.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>cn.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属性。此文件将配置数据库。
持久化操作
用于与一个数据库进行交互持久性操作,它们加载和存储操作。在一个业务组件,所有的持久化操作属于服务类。
在上面的图示包层次结构,创建一个名为“cn.sxt.eclipselink.service'包,在'src'中(源)封装。所有命名为CreateEmloyee.java,UpdateEmployee.java,FindEmployee.java和DeleteEmployee.java 服务类。来自给定的包下,如下所示:
创建Employee
下面的代码段说明了如何创建一个名为CreateEmployee.java的一个Employee类。
package cn.eclipselink.service; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import cn.sxt.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 文件提供持久化单元相同唯一的名称创建一个持久性单元。 EntityManagerFactory对象将由usingcreateEntityManager()方法创建entitymanger实例。 EntityManager对象创建 entitytransactioninstance 事务管理。通过使用 EntityManager 对象,我们可以持久化实体到数据库中。
编译和执行上述程序后,会从库中的EclipseLink得到通知在Eclipse IDE的控制台面板上。
对于结果,打开 MySQL 工作台,然后输入以下的查询。
use jpadb select * from employee
命名为 employee 受影响的数据库表将显示在表格格式如下:
Eid | Ename | Salary | Deg |
---|---|---|---|
1201 | Gopal | 40000 | Technical Manager |
更新Employee
要更新员工的记录,我们需要检索现有记录形成数据库,进行修改,最后提交到数据库中。名为UpdateEmployee.java类如下所示:
package cn.eclipselink.service; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import cn.sxt.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(); } }
编译和执行上述程序后,会从库中的EclipseLink得到通知在Eclipse IDE的控制台面板上。
对于结果,打开MySQL工作台,然后输入以下的查询。
use jpadb select * from employee
命名为employee受影响的数据库表将显示在表格格式如下:
Eid | Ename | Salary | Deg |
---|---|---|---|
1201 | Gopal | 46000 | Technical Manager |
员工的工资为1201将更新为46000。
查找Employee
找一个雇员的记录,从数据库中检索现有数据并显示它。在该操作中,EntityTransaction 未在检索的记录中应用。
命名类 FindEmployee.java如下。
package cn.eclipselink.service; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import cn.sxt.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( )); } }
编译并执行上述程序后,从库中的EclipseLink 会得到以下输出在 Eclipse IDE 控制台面板上。
employee ID = 1201 employee NAME = Gopal employee SALARY = 46000.0 employee DESIGNATION = Technical Manager
删除员工
要删除一个员工的记录,首先我们会发现现有的记录,然后删除它。这里 EntityTransaction 起着重要的作用。
命名 DeleteEmployee.java 类如下:
package cn.eclipselink.service; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import cn.sxt.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 的记录为空。
在此示例中所有的模块完成后,将包和文件的层次结构如下所示:
相关问答
更多-
mysql 的增删改查 实现代码[2023-04-29]
插入一条数据:insert into admin values("admn","admin"); 管理员登录:select * from admin where username="admin" and password="admin"; 如果有数据的话则登陆成功 修改用户名或密码:update admin set username="username" , password="password" where mid=mid 此时管理员已经登陆,可以直接获取到id,根据这个id修改信息 删除:delete ... -
使用eclipse和MySQL,做一个实现增删改查的小项目[2022-01-12]
连接数据库,得到数据库连接变量 [java] view plaincopyprint? //注意,这是连接mysql的方法 注意连接数据库的时候 (1)打开DB Browser 新建一个Database Driver,注意添加Driver JARs的时候添加的包,我的是mysql-connector-java-5.0.3-bin.jar (2)要将数据库jar包拷贝到工程下的WEB-INF\lib下 [java] view plaincopyprint?import java.sql.Connection; ... -
mysql的增删改查语句是怎么写的[2021-11-15]
mysql的增删改查语句是怎么写的,跟sql有什么区别,基本没区别,都差不多,特殊的查询有区别。比如限制结果就不是top了,而是limit 3,5(表示从第3条开始取,取5条)之类的。 还有mysql数据库备份跟附加是不是必须要关闭tomcat,这个没必要,直接可以操作,跟TOMCAT无关,不过如果你的程序做过映射,那要重新装载。 -
请问如何对用Java对mysql进行增删改查等方法?[2022-08-09]
package com.ly520.db; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; import java.util.Enum ... -
请问如何对用Java对mysql进行增删改查等方法?[2022-02-03]
package com.ly520.db; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; import java.util.Enum ... -
小型完整项目一份 能实现简单的增删改查jsp+mysql[2023-08-21]
请邮箱留下,给你发过去 -
mysql和SQL中增删改查语句是否一样呢[2022-07-28]
mysql和SQL标准的增删改查的语句,大部分都是一样,毕竟很多厂商都会按照关系数据库的标准来实现,不过不同的数据库有些会有点不同的。 -
mysql的增删改查语句是怎么写的[2022-04-19]
mysql的增删改查语句是怎么写的,跟sql有什么区别,基本没区别,都差不多,特殊的查询有区别。比如限制结果就不是top了,而是limit 3,5(表示从第3条开始取,取5条)之类的。 还有mysql数据库备份跟附加是不是必须要关闭tomcat,这个没必要,直接可以操作,跟TOMCAT无关,不过如果你的程序做过映射,那要重新装载。 -
mysql 的增删改查 实现代码[2023-04-01]
插入一条数据:insert into admin values("admn","admin"); 管理员登录:select * from admin where username="admin" and password="admin"; 如果有数据的话则登陆成功 修改用户名或密码:update admin set username="username" , password="password" where mid=mid 此时管理员已经登陆,可以直接获取到id,根据这个id修改信息 删除:delete ... -
为什么我们需要JPA Provider(Why we need JPA Provider)[2022-02-07]
代码看起来相同,因为它们遵守规范但基础体系结构有所不同。 所以每个解决方案的性能都会不同。 如果你和我开发了一个函数来排序数据。 用户只需调用sort()函数,但性能会有所不同。 请参阅以下内容: https : //dzone.com/articles/jpa-performance-optimization查看其性能变化。 由于Hibernate和EclipseLink提供了不属于规范的其他功能。 在最终确定第三方软件之前,大多数公司会进行一些实验并比较结果。 他们实际上检查不同解决方案的利弊,并选择适 ...