5 抽取JPAUtil工具类

目的:解决实体管理器工厂的浪费资源和耗时问题

JpaUtils

package cn.ys.jpa.utils;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

/**
 * 解决实体管理器工厂的浪费资源和耗时问题
 *      通过静态代码块的形式,当程序第一次访问此工具类时,创建一个公共的实体管理器工厂对象
 *
 * 第一次访问getEntityManager方法:经过静态代码块创建一个factory对象,再调用方法创建一个EntityManager对象
 * 第二次方法getEntityManager方法:直接通过一个已经创建好的factory对象,创建EntityManager对象
 */
public class JpaUtils {

    private static EntityManagerFactory factory;

    static  {
        //1.加载配置文件,创建entityManagerFactory
        factory = Persistence.createEntityManagerFactory("myJpa");
    }

    /**
     * 获取EntityManager对象
     */
    public static EntityManager getEntityManager() {
        return factory.createEntityManager();
    }
}

测试类

    /**
     * 测试jpa的保存
     *      案例:保存一个客户到数据库中
     *  Jpa的操作步骤
     *     1.加载配置文件创建工厂(实体管理器工厂)对象
     *     2.通过实体管理器工厂获取实体管理器
     *     3.获取事务对象,开启事务
     *     4.完成增删改查操作
     *     5.提交事务(回滚事务)
     *     6.释放资源
     */
    @Test
    public void testSave() {
        EntityManager em = JpaUtils.getEntityManager();
        //3.获取事务对象,开启事务
        EntityTransaction tx = em.getTransaction(); //获取事务对象
        tx.begin();//开启事务
        //4.完成增删改查操作:保存一个客户到数据库中
        Customer customer = new Customer();
        customer.setCustName("友邦");
        customer.setCustIndustry("保险");
        customer.setCustPhone("17607180290");
        //保存
        em.persist(customer); //保存操作
        //5.提交事务
        tx.commit();
        //6.释放资源
        em.close();

    }

你可能感兴趣的:(#,6,JPA)