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 }