JSQL查询

JSQL

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

  • sql:查询的是表和表中的字段
  • jpql:查询的是实体类和类中的属性

 

查询全部   >> getResultList:直接将查询结果封装为list集合

    sq1:SELECT * FROM cst_customer

    jsql:from cn.itcast.domain.Customer (包名可以省略)

 1 package cn.itcast.test;
 2 import cn.itcast.utils.JpaUtils;
 3 import org.junit.Test;
 4 
 5 import javax.persistence.*;
 6 import java.util.List;
 7 /**
 8  * 测试Jpql查询
 9  */
10 public class JpqlTest {
11     /*
12      *查询全部
13      *jsql:from cn.itcast.domain.Customer  (包名可以省略)
14      *sq1:SELECT * FROM cst_customer
15      */
16     @Test
17     public void testFindAll() {
18         //1.获取entityManager对象
19         EntityManager em = JpaUtils.getEntityManager();
20         //2.开启事务
21         EntityTransaction tx = em.getTransaction();
22         tx.begin();
23         //3.查询全部
24         String jpql = "from Customer";
25         //调用em.createQuery(jpql)先创建一个对象query,接收一个jsql语句
26         //创建Query查询对象,query对象才是执行jqp1的对象
27         Query query = em.createQuery(jpql);
28         //发送查询,并封装结果集
29         List list = query.getResultList();
30         //遍历list并打印
31         for (Object o : list) {
32             System.out.println(o);
33         }
34         //4.提交事务
35         tx.commit();
36         //5.释放资源
37         em.close();
38     }}
  • 使用jpql查询,统计客户的总数  >> getSingleResult:得到唯一的结果集

    sq1:SELECT COUNT(cust_id)FROM cst_customer

    jpql: select count(custId)from Customer

 

  • 分页查询  

    >> getResultList:直接将查询结果封装为list集合

    sq1:select*from cst_customer limit?,?   只写2,默认是0,2
    jqp1:from Customer

 

 1 @Test
 2     public void testPage() {
 3         //1.获取entityManager对象
 4         EntityManager em = JpaUtils.getEntityManager();
 5         //2.开启事务
 6         EntityTransaction tx = em.getTransaction();
 7         tx.begin();
 8         //3.查询全部
 9         String jpql = "from Customer";
10         //根据jsql语句创建Query查询对象
11         Query query = em.createQuery(jpql);
12 
13         //起始索引
14         query.setFirstResult(0);
15         //每页查询的条数
16         query.setMaxResults(2);
17 
18         //发送查询,并封装结果集
19         List list = query.getResultList();
20         //遍历list并打印
21         for (Object o : list) {
22             System.out.println(o);
23         }
24         //4.提交事务
25         tx.commit();
26         //5.释放资源
27         em.close();
28     }}

 

案例:查询客户名称以“黑马”开头的客户  >> getResultList:直接将查询结果封装为list集合

  sq1:SELECT * FROM cst_customer WHERE cust_name LIKE ?
  jpql :  from Customer where custName like ?

1         //1.查询全部
2         String jpql = "from Customer where custname like ? ";
3         //2.根据jsql语句创建Query查询对象
4         Query query = em.createQuery(jpql);
5 
6         //3.对参数赋值--占位符参数
7         //第一个参数:占位符的索引位置(从1开始),第二个参数:取值
8         query.setParameter(1,"黑马%");    

 

posted @ 2019-09-09 10:11  小中配奇  阅读(1866)  评论(0编辑  收藏  举报