JPA中的复杂查询

JPQL全称Java Persistence Query Language

基于首次在EJB2.0中引入的EJB查询语言(EJB QL),Java持久化查询语言(JPQL)是一种可移植的查询语言,旨在以面向对象表达式语言的表达式,将SQL语法和简单查询语义绑定在一起·使用这种语言编写的查询是可移植的,可以被编译成所有主流数据库服务器上的SQL。

其特征与原生SQL语句类似,并且完全面向对象,通过类名和属性访问,而不是表名和表的属性

1、查询全部

 1     /**
 2      * 查询全部
 3      *      jqpl:from cn.itcast.domain.Customer
 4      *      sql:SELECT * FROM cst_customer
 5      */
 6     @Test
 7     public void testFindAll() {
 8         //1.获取entityManager对象
 9         EntityManager em = JpaUtils.getEntityManager();
10         //2.开启事务
11         EntityTransaction tx = em.getTransaction();
12         tx.begin();
13         //3.查询全部
14         //Customer相当于from cn.itcast.domain.Customer,此处省略了包名,Customer不可写成customer
15         String jpql = "from Customer ";
16         Query query = em.createQuery(jpql);//创建Query查询对象,query对象才是执行jqpl的对象
17 
18         //发送查询,并封装结果集
19         List list = query.getResultList();
20 
21         for (Object obj : list) {
22             System.out.print(obj);
23         }
24 
25         //4.提交事务
26         tx.commit();
27         //5.释放资源
28         em.close();
29     }

2、排序查询

 1     /**
 2      * 排序查询: 倒序查询全部客户(根据id倒序)
 3      *      sql:SELECT * FROM cst_customer ORDER BY cust_id DESC
 4      *      jpql:from Customer order by custId desc
 5      *      (custId:实体类属性)
 6      *
 7      * 进行jpql查询
 8      *      1.创建query查询对象
 9      *      2.对参数进行赋值
10      *      3.查询,并得到返回结果
11      */
12     @Test
13     public void testOrders() {
14         //1.获取entityManager对象
15         EntityManager em = JpaUtils.getEntityManager();
16         //2.开启事务
17         EntityTransaction tx = em.getTransaction();
18         tx.begin();
19         //3.查询全部
20         String jpql = "from Customer order by custId desc";
21         Query query = em.createQuery(jpql);//创建Query查询对象,query对象才是执行jqpl的对象
22 
23         //发送查询,并封装结果集
24         List list = query.getResultList();
25 
26         for (Object obj : list) {
27             System.out.println(obj);
28         }
29 
30         //4.提交事务
31         tx.commit();
32         //5.释放资源
33         em.close();
34     }

3、统计查询

 1     /**
 2      * 使用jpql查询,统计客户的总数
 3      *      sql:SELECT COUNT(cust_id) FROM cst_customer
 4      *      jpql:select count(custId) from Customer
 5      */
 6     @Test
 7     public void testCount() {
 8         //1.获取entityManager对象
 9         EntityManager em = JpaUtils.getEntityManager();
10         //2.开启事务
11         EntityTransaction tx = em.getTransaction();
12         tx.begin();
13         //3.查询全部
14         //i.根据jpql语句创建Query查询对象
15         String jpql = "select count(custId) from Customer";
16         Query query = em.createQuery(jpql);
17         //ii.对参数赋值
18         //iii.发送查询,并封装结果
19 
20         /**
21          * getResultList : 直接将查询结果封装为list集合
22          * getSingleResult : 得到唯一的结果集
23          */
24         Object result = query.getSingleResult();
25 
26         System.out.println(result);
27 
28         //4.提交事务
29         tx.commit();
30         //5.释放资源
31         em.close();
32     }

4、分页查询

 1     /**
 2      * 分页查询
 3      *      sql:select * from cst_customer limit 0,2
 4      *      jqpl : from Customer
 5      */
 6     @Test
 7     public void testPaged() {
 8         //1.获取entityManager对象
 9         EntityManager em = JpaUtils.getEntityManager();
10         //2.开启事务
11         EntityTransaction tx = em.getTransaction();
12         tx.begin();
13         //3.查询全部
14         //i.根据jpql语句创建Query查询对象
15         String jpql = "from Customer";
16         Query query = em.createQuery(jpql);
17         //ii.对参数赋值 -- 分页参数
18         //起始索引(此处从0开始,不包含0)
19         query.setFirstResult(0);
20         //每页查询的条数
21         query.setMaxResults(2);
22 
23         //iii.发送查询,并封装结果
24 
25         /**
26          * getResultList : 直接将查询结果封装为list集合
27          * getSingleResult : 得到唯一的结果集
28          */
29         List list = query.getResultList();
30 
31         for(Object obj : list) {
32             System.out.println(obj);
33         }
34 
35         //4.提交事务
36         tx.commit();
37         //5.释放资源
38         em.close();
39     }

5、条件查询

 1     /**
 2      * 条件查询
 3      *     案例:查询客户名称以‘传智播客’开头的客户
 4      *          sql:SELECT * FROM cst_customer WHERE cust_name LIKE  ?
 5      *          jpql : from Customer where custName like ?
 6      */
 7     @Test
 8     public void testCondition() {
 9         //1.获取entityManager对象
10         EntityManager em = JpaUtils.getEntityManager();
11         //2.开启事务
12         EntityTransaction tx = em.getTransaction();
13         tx.begin();
14         //3.查询全部
15         //i.根据jpql语句创建Query查询对象
16         String jpql = "from Customer where custName like ? ";
17         Query query = em.createQuery(jpql);
18         //ii.对参数赋值 -- 占位符参数
19         //第一个参数:占位符的索引位置(从1开始),第二个参数:取值
20         query.setParameter(1,"传智播客%");
21 
22         //iii.发送查询,并封装结果
23 
24         /**
25          * getResultList : 直接将查询结果封装为list集合
26          * getSingleResult : 得到唯一的结果集
27          */
28         List list = query.getResultList();
29 
30         for(Object obj : list) {
31             System.out.println(obj);
32         }
33 
34         //4.提交事务
35         tx.commit();
36         //5.释放资源
37         em.close();
38     }

猜你喜欢

转载自www.cnblogs.com/116970u/p/11590468.html
今日推荐