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