criteria

Criteria API 開發 Java 編譯器能夠檢查其正確性的查詢,從而減少運行時不正確 ,這種查詢優於傳統的基於字符串的 Java Persistence Query Language (JPQL) 查詢。借助運用資料庫函數或匹配實例的樣例查詢,我將編程式查詢構造機制的強大,並將其與運用 預定義語法的 JPQL 查詢執行 比較 。
JPQL 查詢有什麼缺陷?
JPA 1.0 引進了 JPQL,這是一種強大的查詢語言,它在很大程度上導致了 JPA 的流行。不過,基於字符串並運用 有限語法的 JPQL 存在一些限定 。要理解 JPQL 的主要限定 之一
SELECT e
FROM Employee e
WHERE e.name ='MIMI'
--------------------------------------------------------

EntityManager em = pr.getEntityManager();
CriteriaBuilder cb=em.getCriteriaBuilder();
CriteriaQuery<Employee> c=cb.createQuery(Employee.class);
Root<Employee>emp=c.form(Employee.class);
c.select(emp).where(cb.equal(emp.get("name"),"MIMI"));

  • 獲取一個 EntityManager 實例。
  • 構造一個 CriteriaQuery 實例。
  • CriteriaQuery 被賦予泛型類型。在構造 CriteriaQuery 時,可以提供各種結果類型參數 —— 從持久化實體(比如 Employee.class)到形式更加靈活的 Object[]
  • CriteriaQuery 實例上配置 了查詢表達式。查詢表達式是在一個樹中組裝的核心單元或節點,用於指定 CriteriaQuery
  • CriteriaQuery 設置為從 Employee.class 查詢。結果返回 Root<Employee> 實例 e
  • Root 是一個查詢表達式,它表示持久化實體的範圍。
  • from()方法的參數是實體類或EntityType實體的實例,from()方法的結果是一個Root類別,它表示 個查詢的from子句中可能出現的物件。
  • select() 和 where()方法指定查詢結果返回的選擇項目
  • 調用 get() 方法獲取路徑表達式

JP QL Clause          Criteria API Interface     Method
SELECT                      CriteriaQuery            select()
FROM                        AbstractQuery            from()
WHERE                    AbstractQuery             where()
ORDER BY                 CriteriaQuery             orderby()
GROUP BY                AbstractQuery             groupby()
HAVING                    AbstractQuery              having()


SELECT e FROM Employee e WHERE e.address.city='New York'
                                                emp.get("address).get("city)

Comments