JSQL查询

2022-10-16,

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,"黑马%");    

 

《JSQL查询.doc》

下载本文的Word格式文档,以方便收藏与打印。