JPA(四) 基本查询

package com.it.jpa.test;

import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.Query;

import org.junit.Test;

import com.it.jpa.domain.Customer;
import com.it.jpa.util.JpaUtil;

public class testJPA {

    /**
     * 
     * 1、保存一个实体
     */
    @Test
    public void testAdd() {
        // 定义对象
        Customer c = new Customer();
        c.setCustName("张三");
        c.setCustLevel("VIP 客户");
        c.setCustSource("网络");
        c.setCustIndustry("IT");
        c.setCustAddress("北京");
        c.setCustPhone("010-84389340");
        EntityManager em = null;
        EntityTransaction tx = null;
        try {
            // 获取实体管理对象
            em = JpaUtil.getEntityManager();
            // 获取事务对象
            tx = em.getTransaction();
            // 开启事务
            tx.begin();
            // 执行操作
            em.persist(c);
            // 提交事务
            tx.commit();
        } catch (Exception e) {
            // 回滚事务
            tx.rollback();
            e.printStackTrace();
        } finally {
            // 释放资源
            em.close();
        }
    }

    @Test
    /**
     * 2、修改
     */
    public void testMerge() {
        // 定义对象
        EntityManager em = null;
        EntityTransaction tx = null;
        try {
            // 获取实体管理对象
            em = JpaUtil.getEntityManager();
            // 获取事务对象
            tx = em.getTransaction();
            // 开启事务
            tx.begin();
            // 执行操作
            Customer c1 = em.find(Customer.class, 1L);
            c1.setCustName("李四");
            em.clear();// 把 c1 对象从缓存中清除出去
            em.merge(c1);
            // 提交事务
            tx.commit();
        } catch (Exception e) {
            // 回滚事务
            tx.rollback();
            e.printStackTrace();
        } finally {
            // 释放资源
            em.close();
        }
    }

    /**
     * 3、删除
     */
    @Test
    public void testRemove() {
        // 定义对象
        EntityManager em = null;
        EntityTransaction tx = null;
        try {
            // 获取实体管理对象
            em = JpaUtil.getEntityManager();
            // 获取事务对象
            tx = em.getTransaction();
            // 开启事务
            tx.begin();
            // 执行操作
            Customer c1 = em.find(Customer.class, 6L);
            em.remove(c1);
            // 提交事务
            tx.commit();

        } catch (Exception e) {
            // 回滚事务
            tx.rollback();
            e.printStackTrace();
        } finally {
            // 释放资源
            em.close();
        }
    }

    /**
     * 4、查询一个: 使用立即加载的策略
     */
    @Test
    public void testGetOne() {
        // 定义对象
        EntityManager em = null;
        EntityTransaction tx = null;
        try {
            // 获取实体管理对象
            em = JpaUtil.getEntityManager();
            // 获取事务对象
            tx = em.getTransaction();
            // 开启事务
            tx.begin();
            // 执行操作
            Customer c1 = em.find(Customer.class, 1L);
            // 提交事务
            tx.commit();
            System.out.println(c1); // 输出查询对象
        } catch (Exception e) {
            // 回滚事务
            tx.rollback();
            e.printStackTrace();
        } finally {
            // 释放资源
            em.close();
        }
    }

    /**
     * 
     * 5、查询所有客户
     */

    @Test
    public void findAll() {
        EntityManager em = null;
        EntityTransaction tx = null;
        try {
            // 获取实体管理对象
            em = JpaUtil.getEntityManager();
            // 获取事务对象
            tx = em.getTransaction();
            tx.begin();
            // 创建 query 对象
            String jpql = "from Customer";
            Query query = em.createQuery(jpql);
            // 查询并得到返回结果
            List list = query.getResultList(); // 得到集合返回类型
            for (Object object : list) {
                System.out.println(object);
            }
            tx.commit();
        } catch (Exception e) {
            // 回滚事务
            tx.rollback();
            e.printStackTrace();
        } finally {
            // 释放资源
            em.close();
        }
    }

    /**
     * 
     * 6、查询一行一列
     */

    @Test
    public void findCount() {
        EntityManager em = null;
        EntityTransaction tx = null;
        try {
            // 获取实体管理对象
            em = JpaUtil.getEntityManager();
            // 获取事务对象
            tx = em.getTransaction();

            tx.begin();
            // 查询全部客户
            // 1.创建 query 对象
            String jpql = "select count(custId) from Customer";
            Query query = em.createQuery(jpql);
            // 2.查询并得到返回结果
            Object count = query.getSingleResult(); // 得到集合返回类型
            System.out.println(count);
            tx.commit();
        } catch (Exception e) {
            // 回滚事务
            tx.rollback();
            e.printStackTrace();
        } finally {
            // 释放资源
            em.close();
        }
    }

    /**
     * 7:根据 id 查询的两种方式及区别
     * 
     * Description: JPA 的查询一个实体的两种方式
     * 
     * find 和 getReference 区别: 第一个:查询的时机不一样。 find 是立即加载 ,只要一调用方法,马上发起查询。
     * getReference 是延迟加载,什么时候使用什么时候加载。 第二个:返回的结果不一样 find 返回的是实体类类型 getReference
     * 返回的是实体类的代理对象 hibernate 中 get 和 load 方法的区别和 jpa 中的 find 和 getReference 是一样的
     * 其中: get 方法对应 find load 方法对应 getReference
     */
    public class JPAFindOneTest {
        // 查询一个
        // 立即加载
        @Test
        public void testFindOne() {
            EntityManager em = JpaUtil.getEntityManager();
            EntityTransaction tx = em.getTransaction();
            tx.begin();
            Customer c = em.find(Customer.class, 1);
            System.out.println(c);
            tx.commit();
            em.close();
        }

        // 查询一个
        // 懒加载(延迟加载)
        @Test
        public void testFindOne2() {
            EntityManager em = JpaUtil.getEntityManager();
            EntityTransaction tx = em.getTransaction();
            tx.begin();
            Customer c = em.getReference(Customer.class, 1);
            System.out.println(c.toString());
            tx.commit();
            em.close();
        }
    }

    /**
     * 8、条件查询
     */
    @Test
    public void findCondition() {
        EntityManager em = null;

        EntityTransaction tx = null;
        try {
            // 获取实体管理对象
            em = JpaUtil.getEntityManager();
            // 获取事务对象
            tx = em.getTransaction();
            tx.begin();
            // 创建 query 对象
            String jpql = "from Customer where custName like ? ";
            Query query = em.createQuery(jpql);
            // 对占位符赋值,从 1 开始
            query.setParameter(1, "传智播客%");
            // 查询并得到返回结果
            Object object = query.getSingleResult(); // 得到唯一的结果集对象
            System.out.println(object);
            tx.commit();
        } catch (Exception e) {
            // 回滚事务
            tx.rollback();
            e.printStackTrace();
        } finally {
            // 释放资源
            em.close();
        }
    }

    /**
     * 9、分页查询客户
     * 
     */
    @Test
    public void findPaged() {
        EntityManager em = null;
        EntityTransaction tx = null;
        try {
            // 获取实体管理对象
            em = JpaUtil.getEntityManager();
            // 获取事务对象
            tx = em.getTransaction();
            tx.begin();
            // 创建 query 对象
            String jpql = "from Customer";
            Query query = em.createQuery(jpql);
            // 起始索引

            query.setFirstResult(0);
            // 每页显示条数
            query.setMaxResults(2);
            // 查询并得到返回结果
            List list = query.getResultList(); // 得到集合返回类型
            for (Object object : list) {
                System.out.println(object);
            }
            tx.commit();
        } catch (Exception e) {
            // 回滚事务
            tx.rollback();
            e.printStackTrace();
        } finally {
            // 释放资源
            em.close();
        }
    }

    /**
     * 10、排序查询
     */
    @Test
    public void testOrder() {
        EntityManager em = null;
        EntityTransaction tx = null;
        try {
            // 获取实体管理对象
            em = JpaUtil.getEntityManager();
            // 获取事务对象
            tx = em.getTransaction();
            tx.begin();
            // 创建 query 对象
            String jpql = "from Customer order by custId desc";
            Query query = em.createQuery(jpql);
            // 查询并得到返回结果
            List list = query.getResultList(); // 得到集合返回类型
            for (Object object : list) {
                System.out.println(object);
            }
            tx.commit();
        } catch (Exception e) {
            // 回滚事务
            tx.rollback();
            e.printStackTrace();
        } finally {
            // 释放资源
            em.close();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值