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 }