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