1.Persistence
主要用来获取EntityManagerFactory的实例;
通过静态方法:createEntityManagerFactory 来实现;
该方法有两个重载版本;
带有一个参数:指定persistence.xml中的持久化单元名为参数;
两个参数: 除了上一个参数外,还可添加一个map做参数;map里存放persistence.xml中的properties标签中的属性;可覆盖配置文件的设置;
2.EntityManagerFactory
用来创建EntityManager的实例;
主要方法:
createEntityManager() ->创建实体管理器对象的实例;
createEntityManager(Map map) ->和前一个一样作用,多了个map用来指定EntityManager属性;
isOpen() ->确定工厂实例是否打开;
close() ->关闭工厂实例,释放资源;
3.EntityManager的基本方法
新建一个junit测试类;
在类中创建工厂方法、类管理器、事物的属性;
建一个初始化方法并加上@Before注解,在每次执行测试方法时会自动调用;
见一个释放资源的方法,加上@After注解;
代码:
private EntityManagerFactory factory;
private EntityManager manager;
private EntityTransaction transaction;
//初始化,在每个方法开始之前调用加@Before
@Before
public void init(){
factory=Persistence.createEntityManagerFactory("jpa_emp");
manager=factory.createEntityManager();
transaction=manager.getTransaction();
transaction.begin();
}
//释放资源,在每个方法调用之后调用加@After
@After
public void destory(){
transaction.commit();
manager.close();
factory.close();
}
1)find()方法
代码:
//测试EntityManager的find()方法
@Test
public void testFind() {
//参数为实体类的class对象和主键id
Emp emp=manager.find(Emp.class, 1);
System.out.println("------------------------");
System.out.println(emp);
}
结果:
Hibernate:
select
emp0_.id as id1_0_0_,
emp0_.birthday as birthday2_0_0_,
emp0_.name as name3_0_0_,
emp0_.salary as salary4_0_0_
from
tb_emp emp0_
where
emp0_.id=?
------------------------
Emp [id=1, name=诸葛村夫, birthday=2019-03-17, salary=2000]
2)getReference方法
代码:
//测试getReference;相当于hibernate的Session的load()方法
@Test
public void testGetReference(){
Emp emp=manager.getReference(Emp.class, 1);
System.out.println("------------------------");
System.out.println(emp);
}
结果:
------------------------
Hibernate:
select
emp0_.id as id1_0_0_,
emp0_.birthday as birthday2_0_0_,
emp0_.name as name3_0_0_,
emp0_.salary as salary4_0_0_
from
tb_emp emp0_
where
emp0_.id=?
Emp [id=1, name=诸葛孔明, birthday=2019-03-17, salary=2000]
3)persistence()方法
代码:
//persistence()类似hibernate的save(),将临时对象变为持久化对象;
//和save()方法的不同:如果对象有设置id则会抛出异常
@Test
public void testPersistence(){
Emp emp=new Emp();
emp.setBirthday(new Date());
emp.setName("小懿子");
emp.setSalary(2500);
manager.persist(emp);
System.out.println(emp.getId());
}
结果:
Hibernate:
insert
into
tb_emp
(birthday, name, salary)
values
(?, ?, ?)
24
4)remove()方法
代码:
//remove()
//类似hibernate的delete()方法;从数据库中移除对象;
//该方法只能移除持久化对象;而hibernate的delete方法能移除游离对象
@Test
public void testRemove(){
//不可用来移除游离对象
//Emp emp=new Emp();
//emp.setId(22);
//获取持久化对象
Emp emp=manager.find(Emp.class, 22);
manager.remove(emp);
}
结果:
Hibernate:
select
emp0_.id as id1_0_0_,
emp0_.birthday as birthday2_0_0_,
emp0_.name as name3_0_0_,
emp0_.salary as salary4_0_0_
from
tb_emp emp0_
where
emp0_.id=?
Hibernate:
delete
from
tb_emp
where
id=?
5)几种方法的详解
.png)
.png)
.png)
4.实体的状态
在jpa规范中,EntityManager对象被用来持久化操作;
实体作为普通java对象,只有在调用EntityManager将其持久化后才能变成持久化对象;
实体的几种状态:
新建 ->新创建的对象,尚未拥有持久性主键;
持久化状态 ->已经拥有了持久化主键,并和持久化建立了上下文环境;
游离 ->拥有持久化主键,但没有和持久建立上下文环境;
删除 ->拥有持久化主键,和持久化建立了上下文环境,但是从数据库中删除;
- EntityManager的merge()方法
EntityManager的merge()方法相当于hibernate中session的saveOrUpdate()方法: 用于实体的插入和更新操作:
- EntityManager的Clear方法的使用
在日常开发中,如果使用hibernate的话,常常会被hibernate的事务搞得焦头烂额.今天解决了之前项目中一直存在的问题,记录一下. 问题描述 有一张表TemplateCopy,如下 publi ...
- JPA的entityManager的find方法与getReference方法的区别
场景 JPA入门简介与搭建HelloWorld(附代码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103473937 ...
- EntityManager方法简介
EntityManager 是用来对实体Bean 进行操作的辅助类.他可以用来产生/删除持久化的实体Bean,通过主键查找实体bean,也可以通过EJB3 QL 语言查找满足条件的实体Bean.实体B ...
- JPA技术之EntityManager使用方法
Session bean or MD bean对Entity bean的操作(包括所有的query, insert, update, delete操作)都是通过EntityManager实例来完成的. ...
- JPA EntityManager详解(一)
JPA EntityManager详解(一) 持久化上下文(Persistence Contexts)的相关知识,内容包括如何从Java EE容器中创建EntityManager对象.如何从Java ...
- 进阶:使用 EntityManager
JPA中要对数据库进行操作前,必须先取得EntityManager实例,这有点类似JDBC在对数据库操作之前,必须先取得Connection实例,EntityManager是JPA操作的基础,它不是设 ...
- Spring Boot-------JPA——EntityManager构建通用DAO
EntityManager EntityManager 是用来对实体Bean 进行操作的辅助类.他可以用来产生/删除持久化的实体Bean,通过主键查找实体bean,也可以通过EJB3 QL 语言查找满 ...
- 使用EntityManager批量保存数据
@PersistenceContext EntityManager em; 从别的系统中定期同步某张表的数据,由于数据量较大,采用批量保存 JPA EntityManager的四个主要方法 ① pub ...
随机推荐
- 2018-2019 ACM-ICPC Southeastern European Regional Programming Contest (SEERC 2018)
layout: post title: 2018-2019 ACM-ICPC Southeastern European Regional Programming Contest (SEERC 201 ...
- win7安装mongodb3.6
1. 下载 https://www.mongodb.com/download-center/enterprise 选择合适平台点击下载 2. 安装mongodb 在win7系统安装mongodb需要v ...
- 如何利用swoole搭建一個簡易聊天室
<?php class Chat { const HOST = '0.0.0.0';//ip地址 0.0.0.0代表接受所有ip的访问 const PART = 82;//端口号 private ...
- union和in哪个效率高
一直都认为是in的效率要高,但是这次确有点蒙圈. SELECT * FROM runinfo WHERE status in (0,2,1,3,4,7,9,10); 这个查询的效率是,经常是1秒多. ...
- python 初始化__init__()
init()方法的重要性体现在两点. 1.初始化既是对象生命周期的开始,也是非常重要的一个步骤,每个对象都必须正确的执行了初始化才能够正常的工作 2.__init__()方法的参数可以多种形式来完成赋 ...
- Jmeter之梯度式加压(Stepping Thread Group)
1.添加线程组(Stepping Thread Group) 2.设置数据 学习参考网址:https://www.cnblogs.com/imyalost/p/7658816.html 这个大大的 ...
- intelliJ idea安装go开发环境 并 搭建go项目 打包
本人使用的是 idea 开发go项目 也是一个初学者 将自己遇到的问题记录分享 在晚上查找了很多资料 没有什么可以直接使用 本人再次整理一下 我使用的idea 时 2017.2.6 版本的 查 ...
- django 支持跨域请求配置
参考:https://www.jianshu.com/p/63fb55bee142 核心注意点:
- 实现JS数组传递
//如果只是一维数组 var list = Request.Form.GetValues("diary[]"); public ContentResult TestHtmlTwo ...
- O043、计算节点宕机了怎么办
参考https://www.cnblogs.com/CloudMan6/p/5562131.html Rebuild 可以恢复损坏的instance .那如果是宿主机坏了怎么办呢?比如硬件故障或者 ...