【JPA】EntitryManager实体管理器(一)
来源:互联网 发布:python json encode 编辑:程序博客网 时间:2024/05/16 01:47
JPA的实体在被数据库持久化之前,需要调用EntityManager接口,这意味着持久化的真正工作是委托给实体管理器来完成的。通过把实体作为参数传递给一个方法调用,或者是从数据库直接读取它,实体管理器能够获得一个实体的引用。 EntiryManager实体管理器来自于EntityManagerFactory工厂。这里涉及几个相关的概念,持久化单元、持久化上下文,按照上面的说法,持久化上下文persitencecontext是指实体管理器在任何给定的时间内所管理的所有实体实例的集合,持久化单元被EntityManagerFactory管理工厂显示或隐式指定。程序代码形式如下:
EntityManagerFactory entityManagerFactory =Persistence.createEntityManagerFactory("EmployeeService");其中EmployeeService即为持久化单元,一个持久化单元由一个实体管理器工厂管理配置。在配置文件中的位置位于根目录下【META-INF】文件夹下定义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="EmployeeService" transaction-type="RESOURCE_LOCAL"> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" /> <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" /> <property name="hibernate.connection.url" value="jdbc:mysql://localhost/jpa_db ?autoReconnect=true&useUnicode=true&characterEncoding=utf8" /> <property name="hibernate.connection.username" value="root" /> <property name="hibernate.connection.password" value="root" /> <property name="hibernate.max_fetch_depth" value="3"/> <!-- create-drop update 如果表不存在则会更新表,或者代码中加了属性,导致表生成一列 --> <property name="hibernate.hbm2ddl.auto" value="update"/> <property name="hibernate.show_sql" value="true" /> <property name="hibernate.format_sql" value="false" /> </properties> </persistence-unit></persistence>
实体管理器工厂创建实体管理器进而进行持久化操作。程序代码如下:
EntityManager entityManager = entityManagerFactory.createEntityManager();
一、持久化数据操作,entityManager.persist(Entity),Entity即为临时对象,调用persist方法持久化对象。
@Testpublic void SaveEmployee() { EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory ("JPAUNIT"); EntityManager entityManager = entityManagerFactory.createEntityManager(); entityManager.getTransaction().begin(); Employee employee = new Employee(); employee.setName("Tony"); employee.setSalary(25); entityManager.persist(employee); entityManager.getTransaction().commit();}
二、寻找实体,entityManage.find(Class,id),通过实体管理器对实体在数据库中进行寻找,当调用完成时,返回的Employee将是一个托管实体,这意味着它将存在与当前实体管理器所关联的持久化上下文中。
@Testpublic void findEmployee() {EntityManagerFactory entityManagerFactory = Persistence. createEntityManagerFactory("JPAUNIT");EntityManager entityManager = entityManagerFactory.createEntityManager();entityManager.getTransaction().begin();Employee employee = entityManager.find(Employee.class, 1);/** * 当实体主键ID在数据库中不存在时,实体管理器返回null * 在使用返回的托管实体前,要确保空检查,否则可能会抛出空指针异常 */if(employee!=null) {System.out.println(employee.toString());}}
三、remove()删除实体,删除实体之前必须确保持久化上下文中存在当前实体,之后调用remove()方法告诉数据库进行删除操作。
@Testpublic void deleteEmployee() { EntityManagerFactory entityManagerFactory = Persistence. createEntityManagerFactory("JPAUNIT");EntityManager entityManager = entityManagerFactory.createEntityManager();entityManager.getTransaction().begin();/**在删除之前得到被托管的实体**/Employee employee = entityManager.find(Employee.class, 1);/**调用remove从数据库中删除**/entityManager.remove(employee);entityManager.getTransaction().commit();}find()数据时,当对象已经被删除或id不存在时,find会返回null,所在再进行remove()时要进行空检查一下。
0 0
- 【JPA】EntitryManager实体管理器(一)
- jpa实体管理器
- JPA实体管理器
- JPA实体管理器
- JPA实体管理器
- JPA实体管理器
- JPA 实体管理器工厂(EntityManagerFactory)
- Java持久性API(JPA)第8讲——实体管理器和实体管理器工厂
- 实体管理器(Entity Manager)学习笔记(JPA)
- JPA初体验系列(二) 实体管理器简介
- 持久化API(JPA)系列(一)实体简介
- Hibernate JPA实体继承的映射(一) 概述
- JPA复习(一)——实体类注解
- Ogre基础教程一----- 场景管理器,场景节点和实体
- Ogre基础教程(一)----- 场景管理器,场景节点和实体.
- JPA 实体Entity
- JPA查询实体属性
- JPA实体映射关系
- 配置了tomcat,更改了默认端口为8070,还是访问不了
- 让你的页面更专业--css框架960Grid System
- 类似facebook无刷新ajax更新
- SORT AGAIN 2523
- Android高级图片滚动控件,编写3D版的图片轮播器
- 【JPA】EntitryManager实体管理器(一)
- maven资源库地址
- Integer to Roman
- shell脚本中$#、$0、$@等特殊变量的含义
- 沙漏光标
- hdu 2600 war
- php.ini中的request_order设置
- linux安装配置postgres及使用dblink
- C++11 中值得关注的几大变化(详解)