一篇文章带你搞定如何使用 Jpa 完成数据库的增删改操作

前面我们已经学习过:一篇文章带你搞定如何抽取 JPAUtil 工具类

所以,本篇文章将基于工具类来实现数据库的增删改操作,保存操作也在上篇文章中讲述过,本篇文章也不在讲述

一、根据 id 查询操作(find 方法实现)

 	@Test
    public void testFind(){
        //1.通过工具类获取entityManager
        EntityManager entityManager = JpaUtils.getEntityManager();
        //2.开启事务
        EntityTransaction tx = entityManager.getTransaction();
        tx.begin();
        //3.增删改查 -- 根据id查询客户
        /**
         * find : 根据id查询数据
         *      class:查询数据的结果需要包装的实体类类型的字节码
         *      id:查询的主键的取值
         */
        Customer customer = entityManager.find(Customer.class, 1l);
         System.out.print(customer);
        //4.提交事务
        tx.commit();
        //5.释放资源
        entityManager.close();
    }

这里的查询结果如果单列出来,除去别名其实就是:select * from customer where id = 1l
在这里插入图片描述
对于 find 实现的查询方法实现,是会在调用 find 方法时,立即发送SQL语句查询数据库的操作,这是 find 和 getReference 方法的区别所在。

二、根据 id 查询操作(getReference 方法实现 - 推荐)

 @Test
    public  void testReference() {
        //1.通过工具类获取entityManager
        EntityManager entityManager = JpaUtils.getEntityManager();
        //2.开启事务
        EntityTransaction tx = entityManager.getTransaction();
        tx.begin();
        //3.增删改查 -- 根据id查询客户
        /**
         * getReference : 根据id查询数据
         *      class:查询数据的结果需要包装的实体类类型的字节码
         *      id:查询的主键的取值
         */
        Customer customer = entityManager.getReference(Customer.class, 1l);
        System.out.print(customer);
        //4.提交事务
        tx.commit();
        //5.释放资源
        entityManager.close();
    }

方法查询结果和 find 方法并没有什么不同,
关键是 getReference 是一种延迟加载策略的操作实现,调用 getReference 方法时,并不会立即查询数据库,而是真正使用时在system输出时,才真正调用数据库的SQL语句进行查询

	/**
     * 根据id查询客户
     *      getReference方法
     *          1.获取的对象是一个动态代理对象
     *          2.调用getReference方法不会立即发送sql语句查询数据库
     *              * 当调用查询结果对象的时候,才会发送查询的sql语句:什么时候用,什么时候发送sql语句查询数据库
     *
     * 延迟加载(懒加载)
     *      * 得到的是一个动态代理对象
     *      * 什么时候用,什么使用才会查询
     */

三、删除操作

	/**
     * 删除客户的案例
     *
     */
    @Test
    public  void testRemove() {
        //1.通过工具类获取entityManager
        EntityManager entityManager = JpaUtils.getEntityManager();
        //2.开启事务
        EntityTransaction tx = entityManager.getTransaction();
        tx.begin();
        //3.增删改查 -- 删除客户

        //i 根据id查询客户
        Customer customer = entityManager.find(Customer.class,1l);
        //ii 调用remove方法完成删除操作
        entityManager.remove(customer);

        //4.提交事务
        tx.commit();
        //5.释放资源
        entityManager.close();
    }

在这里插入图片描述

四、更新操作

/**
     * 更新客户的操作
     *      merge(Object)
     */
    @Test
    public  void testUpdate() {
        //1.通过工具类获取entityManager
        EntityManager entityManager = JpaUtils.getEntityManager();
        //2.开启事务
        EntityTransaction tx = entityManager.getTransaction();
        tx.begin();
        //3.增删改查 -- 更新操作

        //i 查询客户
        Customer customer = entityManager.find(Customer.class,1l);
        //ii 更新客户
        customer.setCustIndustry("yolo_2");
        entityManager.merge(customer);

        //4.提交事务
        tx.commit();
        //5.释放资源
        entityManager.close();
    }

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/nanhuaibeian/article/details/107271555