• JPA的API介绍、工具类抽取


    1、Persistence对象

    Persistence对象主要作用是用于获取EntityManagerFactory对象的 。通过调用该类的createEntityManagerFactory静态方法,根据配置文件中持久化单元名称创建EntityManagerFactory。

    //1. 创建 EntitymanagerFactory
    @Test
    String unitName = "myJpa";
    EntityManagerFactory factory= Persistence.createEntityManagerFactory(unitName);

    2、EntityManagerFactory

    EntityManagerFactory 接口主要用来创建 EntityManager 实例

    //创建实体管理类
    EntityManager em = factory.createEntityManager();

    由于EntityManagerFactory 是一个线程安全的对象(即多个线程访问同一个EntityManagerFactory 对象不会有线程安全问题),并且EntityManagerFactory 的创建极其浪费资源,所以在使用JPA编程时,我们可以对EntityManagerFactory 的创建进行优化,只需要做到一个工程只存在一个EntityManagerFactory 即可

    3、EntityManager

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

    我们可以通过调用EntityManager的方法完成获取事务,以及持久化数据库的操作

    方法说明:

        getTransaction : 获取事务对象
        persist : 保存操作
        merge : 更新操作
        remove : 删除操作
        find/getReference : 根据id查询

    4、EntityTransaction

    在 JPA 规范中, EntityTransaction是完成事务操作的核心对象,对于EntityTransaction在我们的java代码中承接的功能比较简单

    begin:开启事务
    commit:提交事务
    rollback:回滚事务

    5、抽取JPAUtil工具类

     1 package cn.itcast.utils;
     2 
     3 import javax.persistence.EntityManager;
     4 import javax.persistence.EntityManagerFactory;
     5 import javax.persistence.Persistence;
     6 
     7 /**
     8  * 解决实体管理器工厂的浪费资源和耗时问题
     9  *      通过静态代码块的形式,当程序第一次访问此工具类时,创建一个公共的实体管理器工厂对象
    10  *
    11  * 第一次访问getEntityManager方法:经过静态代码块创建一个factory对象,再调用方法创建一个EntityManager对象
    12  * 第二次方法getEntityManager方法:直接通过一个已经创建好的factory对象,创建EntityManager对象
    13  */
    14 public class JpaUtils {
    15 
    16     private static EntityManagerFactory factory;
    17 
    18     static  {
    19         //1.加载配置文件,创建entityManagerFactory
    20         factory = Persistence.createEntityManagerFactory("myJpa");
    21     }
    22 
    23     /**
    24      * 获取EntityManager对象
    25      */
    26     public static EntityManager getEntityManager() {
    27         return factory.createEntityManager();
    28     }
    29 }
  • 相关阅读:
    js原型链
    js的__proto__,prototype、constructor属性
    百度ife2015-小白的弯路2
    百度ife2015-小白的弯路1
    Visaul Studio 密钥
    pycharm常用的一些快捷键
    python3练习题--字符串
    字符串相关方法
    python3 基本数据类型
    在python中缩进的重要性
  • 原文地址:https://www.cnblogs.com/116970u/p/11589797.html
Copyright © 2020-2023  润新知