点击访问:JPA环境配置(一)

Persistence:

Persistence用于获取EntityManagerFactory实例,这个类中包含一个名为createEntityManagerFactory的静态方法。

这个方法有两个重载的版本:

1)带有一个参数的方法以JPA配置文件中的持久化单元名为参数。

<persistence-unit name="JpaDemo1" transaction-type="RESOURCE_LOCAL">

就是这个JpaDemo1

2)带有两个参数的方法:第一个参数和第一种版本一样,第二个参数传下去的是个Map集合,这个集合可以用来设置JPA的配置。

EntityManagerFactory:

这个接口主要是用来创建EntityManager实例对象,这个接口中约束了4个方法。

createEntityManager():用于创建实体管理器对象的实例

createEntityManager(Map map):map参数用于提供EntityManager的属性

isOpen():用来检测EntityManagerFactory对象是否关闭,在工厂打开之后除非调用close()才会关闭

close():上面也说了,关闭工厂用的,关闭之后在使用抛出异常IllegalStateException

EntityManager:

在JPA规范中,ENtityManager是完成持久化操作的核心对象,实体作为普通Java对象,只有在调用EntityManager将它与数据库互交后变成持久化对象。EntityManager对象在一组实体类与底层数据源之间进行O/R映射的管理。它可以用来管理和更新Entity Bean,根据主键查找Entity Bean,还可以通过JPQL语句查询实例。

实体的状态分为:

1)新建状态:新创建的对象,还没拥有持久化主键

2)持久化状态:已经拥有持久性主键和持久化建立了上下文环境

3)游离状态:拥有持久化主键,但是没有与持久化建立上下文环境

4)删除状态:拥有持久化主键,已经和持久化建立上下文,但是数据库的已经被删除。

现在测试下这个类中的方法如何使用。

find(Class<T> entityClass , Object primaryKey)

第一个参数 entityClass是持久化类的class对象,第二个参数是主键ID,同hibernate种get()方法,一旦执行立即加载,立马发送语句

//获取持久化对象,立即发送sql语句,没有查到对应的数据返回null
 Student student = entityManager.find(Student.class, 1);
 System.out.println(student);

getReference(Class<T> entityClass , Object primaryKey)

第一个参数 entityClass是持久化类的class对象,第二个参数是主键ID。同hibernate中load()方法,即使执行使用才加载,使用才发送语句

@Test
    public void test3(){
        //获取持久化对象,延迟加载使用才发送sql语句,没有查询到对应于的数据抛出异常
        Student student = entityManager.getReference(Student.class,1);
        System.out.println(student);
    }

persist(Object entity)

用于将新建对象纳入到EntitiyManager的管理,该方法执行后这个对象将变成持久化对象。如果对已经处于持久化的对象进行管理那么这个方法什么都不会做,将删除状态的对象传入会将这个对象给持久化。如果将游离状态的对象传入可以抛出异常。

//将新建对象转换为持久化对象
        Student student = new Student("AA", "AA-00", 11, "13212341234", "中国-未知-未知");
        entityManager.persist(student);

remove(Object entity)

删除实例,只能删除持久化对象同Hibernate。

    @Test
    public void test5(){
        //删除一个持久化对象,数据库对应记录会对应删除
        Student student = entityManager.find(Student.class,1);
        entityManager.remove(student);
    }

createQuery(String hqString)

创建一个查询对象

@Test
    public void createQuery(){
        //创建一个查询对象
        String hql = "from Student";
        Query query = entityManager.createQuery(hql);
        List<Student> students = query.getResultList();
        for (Student student : students) {
            System.out.println(student);
        }
    }

createNamedQuery(String nameString)

根据命名的查询语句块创建查询对象。参数为命名的查询语句。

createNativeQuery (String sqlString):

使用标准 SQL语句创建查询对象。参数为标准SQL语句字符串。

@Test
    public void createNativeQuery(){
        //使用标准 SQL语句创建查询对象。参数为标准SQL语句字符串。
        String sql = "select * from tal_student";
        Query query = entityManager.createNativeQuery(sql,Student.class);
        List<Student> students = query.getResultList();
        for (Student student : students) {
            System.out.println(student);
        }
        //createNativeQuery (String sqls, String resultSetMapping)
        //使用标准SQL语句创建查询对象,并指定返回结果集 Map的 名称。
    }

merge(T entity)

同HIbernate saveOrUpdate方法,用于持久化对象同步如果没有就Insert 如果有就执行update

flush()

同步持久上下环境意思就是将持久上下文所有没有保存的数据更新到数据库

refresh()

用于更新实体记录的数据
contains(Object entity)

判断一个对象是否是持久化对象

isOpen()

判断实体管理器是否打开

getTransaction()

返回资源层事务对象。

close()

关闭这个实体管理器

EntityTransaction

接口用来管理资源层实体管理器的事务操作。通过调用实体管理器的getTransaction方法 获得其实例。

这里面有几个常用的方法和hibernate中Transaction都是一样的。

Begin()启动一个事务,如果这个事物已经启动抛出一个异常

commit()提交一个事物,提交之后将增删改操作更新至数据库

rollback()回滚一个数据,回滚后所有的操作将失效。

注意我上面那些操作代码使用的是单元测试,@Before中就已经初始化工厂与实体管理器,在@After中对事物进行过提交与资源关闭,没提交事务,上面那些增删改操作都是失效操作。

JPA核心类与使用的更多相关文章

  1. cesium核心类Viewer简介

    1.简单描述Viewer Viewer类是cesium的核心类,是地图可视化展示的主窗口,cesium程序应用的切入口,扮演必不可少的核心角色. 官网的英文解析如下: A base widget fo ...

  2. Webwork 学习之路【03】核心类 ServletDispatcher 的初始化

    1. Webwork 与 Xwork 搭建环境需要的的jar 为:webwork-core-1.0.jar,xwork-1.0.jar,搭建webwork 需要xwork 的jar呢?原因是这样的,W ...

  3. Hibernate核心类用法-使用Transaction管理事务

    一个典型的事务应该使用下面的形式 在创建完Session对象后即使用beginTransaction()启动事务 从此开始直到commit()之间的代码 都会处于同一个事务中 这两个函数之间所有的数据 ...

  4. 理解Lucene索引与搜索过程中的核心类

    理解索引过程中的核心类 执行简单索引的时候需要用的类有: IndexWriter.ƒDirectory.ƒAnalyzer.ƒDocument.ƒField 1.IndexWriter IndexWr ...

  5. android的消息处理有三个核心类:Looper,Handler和Message。

    android的消息处理机制(图+源码分析)——Looper,Handler,Message   作为 一名android程序员,我学习android的一大乐趣是可以通过源码学习google大牛们的设 ...

  6. codeigniter框架扩展核心类---实现前台后台视图的分离

    1. 扩展核心类,主要作用就是扩展系统现在的功能. 为前台增加独立的视图文件夹: a. 自定义路径常量 :在application ->config/  constants.php中增加 /*m ...

  7. Activiti源码分析(框架、核心类。。。)

    http://jiangwenfeng762.iteye.com/blog/1338553 Activiti是业界很流行的java工作流引擎,关于Activiti与JBPM5的关系和如何选择不是本文要 ...

  8. Spring Security——核心类简介——获得登录用户的相关信息

    核心类简介 目录 1.1     Authentication 1.2     SecurityContextHolder 1.3     AuthenticationManager和Authenti ...

  9. lucene原理及源码解析--核心类

    马云说:大家还没搞清PC时代的时候,移动互联网来了,还没搞清移动互联网的时候,大数据时代来了. 然而,我看到的是:在PC时代搞PC的,移动互联网时代搞移动互联网的,大数据时代搞大数据的,都是同一伙儿人 ...

随机推荐

  1. Educational Codeforces Round 47 (Rated for Div. 2)E.Intercity Travelling

    题目链接 大意:一段旅途长度N,中间可能存在N-1个休息站,连续走k长度时,疲劳值为a1+a2+...+aka_1+a_2+...+a_ka1​+a2​+...+ak​,休息后a1a_1a1​开始计, ...

  2. t-sql对被除数为0&除数小于被除数结果为0&除法保留2位小数的处理

    SELECT round(CAST(12 AS FLOAT)/nullif(13,0),2,1) FROM TB

  3. ES6走一波 变量结构赋值

    Destructuring  变量的解构赋值 是一种模式匹配 ES6我关注点之一是用途  能否举些好例子是检验学习到位的方法之一 交换变量值 函数返回多个值 函数入参为对象.数组,内部使用更简洁 意义 ...

  4. 异步Async

    1.c#异步介绍 异步必须基于委托,有委托才有异步 新建一个window Form程序MyAsync,添加一个按钮,(name)=btnAsync 后台代码如下: using System;using ...

  5. Gulp简明使用教程

    Glup用自动化构建工具增强你的工作流程! 同类型的软件还有Grunt.关于两者的区别可以参考这篇文章Grunt VS Gulp 安装: $ npm install gulp -g $ npm ins ...

  6. Mint-UI

    Mint-UI是基于Vue.js的移动端组件库 Mint-UI是Vue组件库,是使用Vue技术封装出来的成套的组件,可以无缝地和Vue项目进行集成开发 Mint UI官网 不同版本的安装 导入有两种方 ...

  7. pytorch1.0 用torch script导出模型

    python的易上手和pytorch的动态图特性,使得pytorch在学术研究中越来越受欢迎,但在生产环境,碍于python的GIL等特性,可能达不到高并发.低延迟的要求,存在需要用c++接口的情况. ...

  8. [python] 基础工具介绍好文推荐

    Github上有个哥们写的,还不错,mark一下: https://github.com/lijin-THU/notes-python/blob/master/index.ipynb 相对全面的介绍了 ...

  9. Java基础3-数组操作;类概述

    昨日内容回顾 数据类型 基本数据类型 1) byte, short, int, long, float, double 2) boolean[true, false] 3) char 100: 默认为 ...

  10. Json的序列化与反序列化以及乱入的k_BackingField

    0.Newtonsoft.json 最简单的最强大的基于c#的json解析库是Newtonsoft.json 在NuGet程序包管理器中在线搜索“json”,选择JSon.Net,并安装.   使用到 ...