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)几种方法的详解
 
4.实体的状态
在jpa规范中,EntityManager对象被用来持久化操作;
实体作为普通java对象,只有在调用EntityManager将其持久化后才能变成持久化对象;
实体的几种状态:
    新建    ->新创建的对象,尚未拥有持久性主键;
    持久化状态    ->已经拥有了持久化主键,并和持久化建立了上下文环境;
    游离    ->拥有持久化主键,但没有和持久建立上下文环境;
    删除    ->拥有持久化主键,和持久化建立了上下文环境,但是从数据库中删除;
 

EntityManager的基本方法的更多相关文章

  1. EntityManager的merge()方法

    EntityManager的merge()方法相当于hibernate中session的saveOrUpdate()方法: 用于实体的插入和更新操作:

  2. EntityManager的Clear方法的使用

    在日常开发中,如果使用hibernate的话,常常会被hibernate的事务搞得焦头烂额.今天解决了之前项目中一直存在的问题,记录一下. 问题描述 有一张表TemplateCopy,如下 publi ...

  3. JPA的entityManager的find方法与getReference方法的区别

    场景 JPA入门简介与搭建HelloWorld(附代码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103473937 ...

  4. EntityManager方法简介

    EntityManager 是用来对实体Bean 进行操作的辅助类.他可以用来产生/删除持久化的实体Bean,通过主键查找实体bean,也可以通过EJB3 QL 语言查找满足条件的实体Bean.实体B ...

  5. JPA技术之EntityManager使用方法

    Session bean or MD bean对Entity bean的操作(包括所有的query, insert, update, delete操作)都是通过EntityManager实例来完成的. ...

  6. JPA EntityManager详解(一)

    JPA EntityManager详解(一) 持久化上下文(Persistence Contexts)的相关知识,内容包括如何从Java EE容器中创建EntityManager对象.如何从Java ...

  7. 进阶:使用 EntityManager

    JPA中要对数据库进行操作前,必须先取得EntityManager实例,这有点类似JDBC在对数据库操作之前,必须先取得Connection实例,EntityManager是JPA操作的基础,它不是设 ...

  8. Spring Boot-------JPA——EntityManager构建通用DAO

    EntityManager EntityManager 是用来对实体Bean 进行操作的辅助类.他可以用来产生/删除持久化的实体Bean,通过主键查找实体bean,也可以通过EJB3 QL 语言查找满 ...

  9. 使用EntityManager批量保存数据

    @PersistenceContext EntityManager em; 从别的系统中定期同步某张表的数据,由于数据量较大,采用批量保存 JPA EntityManager的四个主要方法 ① pub ...

随机推荐

  1. hdu 1506 直方图内最大矩形

    题目传送门//res tp hdu 单调栈的经典问题 维护区间的左右边界计算面积即可 #include<iostream> #include<algorithm> #inclu ...

  2. 基于Springboot后台,前台 vue.js 跨域 Activiti6 工作流(用到websocket技术) 的项目

    工作流模块----------------------------------------------------------------------------------------------- ...

  3. Web安全微专业正式课 大纲(图片)

    如果想报名学习,可以联系我.QQ:1097321785.

  4. drf序列化及反序列化

    假如把drf看做一个汉堡包,我们之前讲的模块属于汉堡包前面的盖盖(请求模块.渲染模块)和底底(异常模块.解析模块.响应模块),但是真正中间的夹心没有讲,那么今天我就和大家来看一下汉堡包的夹心(序列化及 ...

  5. Ruby Rails学习中:User 模型,验证用户数据

    用户建模 一. User 模型 实现用户注册功能的第一步是,创建一个数据结构,用于存取用户的信息. 在 Rails 中,数据模型的默认数据结构叫模型(model,MVC 中的 M).Rails 为解决 ...

  6. 文件名后面加(1).text

    ; //在重复名称后加(序号) while (File.Exists(path)) { if (path.Contains(").")) { int start = path.La ...

  7. Makefile速查笔记

    Makefile速查笔记 Makefile中的几个调试方法 一. 使用 info/warning/error 增加调试信息 a. $(info "some text")打印 &qu ...

  8. Guava动态调用方法

    前言 大家在Coding的时候,经常会遇到这样一个情况,根据不同的条件去执行对应的代码.我们通常的处理方式是利用if-else判断,或者直接switch-case,特别是jdk1.6之后,swith开 ...

  9. vuex store更新了数据,但未触发getters

    遇到一个奇怪的问题,我将数组存储在store中,更新数组,第一次会生效,第二次就不会再触发getters,通过检查发现state中的数组是有更新的. 尝试过网上很多的解决办法: 1.getters r ...

  10. app欢迎页问题

    今天替换app中的图片,打包成apk后,欢迎页的图片怎么替换都还是旧的,尝试多次以后,确定以及肯定是替换成功了的,而且替换的也都对,只好清理了一下项目,重新build,最后再打包,结果成功了!真是坑! ...