SpringDataJpa简单优化

本文介绍了如何对SpringDataJpa进行简单优化,通过将工厂对象的创建放在静态代码块中,仅在程序启动时创建一次,以节省内存资源和提高运行效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SpringDataJpa简单优化

未优化前的代码:

public class JpaTest {

    /**
     * 测试jpa的保存
     *      案例:保存一个客户到数据库中
     * jpa的操作步骤
     *      1、加载配置文件创建工厂(实体管理工厂)对象
     *      2、通过实体管理工厂获取实体管理器
     *      3、获取事务对象,开启事务
     *      4、完成增删改查操作
     *      5、提交事务(回滚事务)
     *      6、释放资源
     */
    @Test
    public void testSave(){
        //加载配置文件创建工厂(实体管理工厂)对象
        EntityManagerFactory factory = Persistence.createEntityManagerFactory("myjpa");

        //通过实体管理工厂获取实体管理器
        EntityManager em = factory.createEntityManager();

        //获取事务对象,开启事务
        EntityTransaction tx = em.getTransaction();
        tx.begin();

        //完成增删改查操作
        Customer customer = new Customer();
        customer.setCustName("ruirui");
        customer.setCustLevel("vip");
        customer.setCustSource("网络");
        customer.setCustPhone("123456");
        customer.setCustAddress("懒人中心");

        //保存
        em.persist(customer);

        //提交事务
        tx.commit();

        //释放资源
        em.close();
        factory.close();
    }

}

我们在每次保存数据库时都要创建工厂对象,这样极大浪费了内存资源和耗费大量时间,所以我们将创建工厂对象放在静态代码块中,只在启动程序时创建一次,这样子就可以较大幅度优化性能

具体代码如下:

工具类

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

    private static EntityManagerFactory factory;

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

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

}

测试类

public class JpaTest {

    /**
     * 测试jpa的保存
     *      案例:保存一个客户到数据库中
     * jpa的操作步骤
     *      1、加载配置文件创建工厂(实体管理工厂)对象
     *      2、通过实体管理工厂获取实体管理器
     *      3、获取事务对象,开启事务
     *      4、完成增删改查操作
     *      5、提交事务(回滚事务)
     *      6、释放资源
     */
    @Test
    public void testSave(){

        //通过实体管理工厂获取实体管理器
        EntityManager em = JpaUtils.getEntityManager();

        //获取事务对象,开启事务
        EntityTransaction tx = em.getTransaction();
        tx.begin();

        //完成增删改查操作
        Customer customer = new Customer();
        customer.setCustName("ruirui");
        customer.setCustLevel("vip");
        customer.setCustSource("网络");
        customer.setCustPhone("123456");
        customer.setCustAddress("懒人中心");

        //保存
        em.persist(customer);

        //提交事务
        tx.commit();

        //释放资源
        em.close();
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值