zoukankan      html  css  js  c++  java
  • 4、JPA规范之基础查询

    persist方法,执行添加操作

    /**
     * 测试jpa的添加操作
     */
    @Test
    public void testInsert(){
        //1.加载配置文件创建工厂(实体类工厂)对象
        EntityManagerFactory factory = Persistence.createEntityManagerFactory("myJpa");
        //2.通过实体管理器工厂获取实体管理器
        EntityManager entityManager = factory.createEntityManager();
    
        //3.获取事务对象,开启事务
        EntityTransaction transaction = entityManager.getTransaction();
        transaction.begin();
        //4.完成增删改查操作
        Users user = new Users();
        user.setUserName("小黑");
        user.setUserSex("男");
        //保存
        entityManager.persist(user);
        //5.提交事务(回滚事务)
        transaction.commit();
        //6.释放资源
        entityManager.close();
        factory.close();
    }
    

    find方法,通过id查询单条数据(即时加载)

    /**
     * 根据id查询用户
     *  使用find方法查询
     *      1.查询的对象就是当前客户对象本身
     *      2.在调用find方法的时候,就会发送sql语句查询数据库(立即加载)
     */
    @Test
    public void testFind(){
        //1.加载配置文件创建工厂(实体类工厂)对象
        EntityManagerFactory factory = Persistence.createEntityManagerFactory("myJpa");
        //2.通过实体管理器工厂获取实体管理器
        EntityManager entityManager = factory.createEntityManager();
        
        //3.获取事务对象,开启事务
        EntityTransaction transaction = entityManager.getTransaction();
        transaction.begin();
        //4.完成增删改查操作
        Users user = entityManager.find(Users.class, 1);
        System.out.println(user);
    
        //5.提交事务(回滚事务)
        transaction.commit();
        //6.释放资源
        entityManager.close();
        factory.close();
    }
    

    getReference方法,通过id查询单条数据(延迟加载)

    /**
     * 根据id查询用户
     *      getReference方法
     *          1.获取的对象是一个动态代理对象
     *          2.调用getReference方法不会立即发送sql语句查询数据库
     *                  当调用查询结果对象时,才会发送sql语句(懒加载)
     */
    @Test
    public void testReference(){
        //1.加载配置文件创建工厂(实体类工厂)对象
        EntityManagerFactory factory = Persistence.createEntityManagerFactory("myJpa");
        //2.通过实体管理器工厂获取实体管理器
        EntityManager entityManager = factory.createEntityManager();
    
        //3.获取事务对象,开启事务
        EntityTransaction transaction = entityManager.getTransaction();
        transaction.begin();
        //4.完成增删改查操作
        Users user = entityManager.getReference(Users.class, 1);
        System.out.println(user);
    
        //5.提交事务(回滚事务)
        transaction.commit();
        //6.释放资源
        entityManager.close();
        factory.close();
    }
    

    remove方法,执行删除操作

    @Test
    public void testRemove(){
        //1.加载配置文件创建工厂(实体类工厂)对象
        EntityManagerFactory factory = Persistence.createEntityManagerFactory("myJpa");
        //2.通过实体管理器工厂获取实体管理器
        EntityManager entityManager = factory.createEntityManager();
        
        //3.获取事务对象,开启事务
        EntityTransaction transaction = entityManager.getTransaction();
        transaction.begin();
        //4.完成增删改查操作
        Users user = entityManager.find(Users.class, 4);
        entityManager.remove(user);
    
        //5.提交事务(回滚事务)
        transaction.commit();
        //6.释放资源
        entityManager.close();
        factory.close();
    }
    

    merge方法,执行更新操作

    @Test
    public void testUpdate(){
        //1.加载配置文件创建工厂(实体类工厂)对象
        EntityManagerFactory factory = Persistence.createEntityManagerFactory("myJpa");
        //2.通过实体管理器工厂获取实体管理器
        EntityManager entityManager = factory.createEntityManager();
        //3.获取事务对象,开启事务
        EntityTransaction transaction = entityManager.getTransaction();
        transaction.begin();
        //4.完成增删改查操作
        Users user = entityManager.find(Users.class, 3);
        user.setUserName("小白");
        entityManager.merge(user);
    
        //5.提交事务(回滚事务)
        transaction.commit();
        //6.释放资源
        entityManager.close();
        factory.close();
    }
    

    HPQL 查询

    hpql 语法与 hql语法一致

    hpql 执行查询所有数据

    /**
     * 查询所有
     * select * from users
     */
    @Test
    public void testFindAll(){
        //1.加载配置文件创建工厂(实体类工厂)对象
        EntityManagerFactory factory = Persistence.createEntityManagerFactory("myJpa");
        //2.通过实体管理器工厂获取实体管理器
        EntityManager entityManager = factory.createEntityManager();
    
        //3.获取事务对象,开启事务
        EntityTransaction transaction = entityManager.getTransaction();
        transaction.begin();
        //4.完成增删改查操作
        String jpql = "from com.example.pojo.Users";
        Query query = entityManager.createQuery(jpql); //创建Query查询对象,query对象才是执行jpql的对象
    
        List<Users> list = query.getResultList();
    
        for (Users user: list
             ) {
            System.out.println(user);
        }
    
        //5.提交事务(回滚事务)
        transaction.commit();
        //6.释放资源
        entityManager.close();
        factory.close();
    }
    

    降序查询

        @Test
        public void testDestFindAll(){
            //1.加载配置文件创建工厂(实体类工厂)对象
            EntityManagerFactory factory = Persistence.createEntityManagerFactory("myJpa");
            //2.通过实体管理器工厂获取实体管理器
            EntityManager entityManager = factory.createEntityManager();
          
            //3.获取事务对象,开启事务
            EntityTransaction transaction = entityManager.getTransaction();
            transaction.begin();
            //4.完成增删改查操作
            String jpql = "from com.example.pojo.Users order by userId desc";
            Query query = entityManager.createQuery(jpql); //创建Query查询对象,query对象才是执行jpql的对象
    
            List<Users> list = query.getResultList();
    
            for (Users user: list
                    ) {
                System.out.println(user);
            }
    
            //5.提交事务(回滚事务)
            transaction.commit();
            //6.释放资源
            entityManager.close();
            factory.close();
        }
    

    聚合函数

        /**
         * 聚合函数
         */
        @Test
        public void testFindAllCount(){
            //1.加载配置文件创建工厂(实体类工厂)对象
            EntityManagerFactory factory = Persistence.createEntityManagerFactory("myJpa");
            //2.通过实体管理器工厂获取实体管理器
            EntityManager entityManager = factory.createEntityManager();
            
            //3.获取事务对象,开启事务
            EntityTransaction transaction = entityManager.getTransaction();
            transaction.begin();
            //4.完成增删改查操作
            String jpql = "select count(userId) from com.example.pojo.Users";
            Query query = entityManager.createQuery(jpql); //创建Query查询对象,query对象才是执行jpql的对象
    
            Object singleResult = query.getSingleResult();
            System.out.println(singleResult);
    
            //5.提交事务(回滚事务)
            transaction.commit();
            //6.释放资源
            entityManager.close();
            factory.close();
        }
    

    分页查询

        /**
         * 分页查询
         * select * from users limit 0,3
         */
        @Test
        public void testlimitFind(){
            //1.加载配置文件创建工厂(实体类工厂)对象
            EntityManagerFactory factory = Persistence.createEntityManagerFactory("myJpa");
            //2.通过实体管理器工厂获取实体管理器
            EntityManager entityManager = factory.createEntityManager();
            
            //3.获取事务对象,开启事务
            EntityTransaction transaction = entityManager.getTransaction();
            transaction.begin();
            //4.完成增删改查操作
            String jpql = "from com.example.pojo.Users";
            Query query = entityManager.createQuery(jpql); //创建Query查询对象,query对象才是执行jpql的对象
            //设置从哪个小标开始读取数据
            query.setFirstResult(0);
            //设置最多获取几条数据
            query.setMaxResults(3);
    
            List<Users> resultList = query.getResultList();
    
            for (Users user: resultList
                 ) {
                System.out.println(user);
            }
    
            //5.提交事务(回滚事务)
            transaction.commit();
            //6.释放资源
            entityManager.close();
            factory.close();
        }
    

    条件查询

        /**
         * 条件查询
         * select * from users limit 0,3
         */
        @Test
        public void testCondition(){
            //1.加载配置文件创建工厂(实体类工厂)对象
            EntityManagerFactory factory = Persistence.createEntityManagerFactory("myJpa");
            //2.通过实体管理器工厂获取实体管理器
            EntityManager entityManager = factory.createEntityManager();
           
            //3.获取事务对象,开启事务
            EntityTransaction transaction = entityManager.getTransaction();
            transaction.begin();
            //4.完成增删改查操作
            String jpql = "from Users where userName like ?";
            Query query = entityManager.createQuery(jpql); //创建Query查询对象,query对象才是执行jpql的对象
            query.setParameter(1,"%白%");
    
            List<Users> resultList = query.getResultList();
    
            for (Users user: resultList
                    ) {
                System.out.println(user);
            }
    
            //5.提交事务(回滚事务)
            transaction.commit();
            //6.释放资源
            entityManager.close();
            factory.close();
        }
    

    以上方法出现过多的重复性代码,这些代码都是获取对象,事务提交回滚,释放资源,这些代码都可以向上抽取,Spring Data JPA就是对原有的JPA规范再进行封装

  • 相关阅读:
    【CF833E】Caramel Clouds
    【LG2183】[国家集训队]礼物
    (ex)Lucas总结
    【CF527C】Glass Carving
    【CF833D】Red-Black Cobweb
    【LG4631】[APIO2018]Circle selection 选圆圈
    volatile梳理
    ThreadLocal梳理
    java线程基础梳理
    TCP/IP
  • 原文地址:https://www.cnblogs.com/Ryuichi/p/13507130.html
Copyright © 2011-2022 走看看