最近在項目中使用 SPRing 和 Hibernate 進行開發(fā),有感于 Criteria 比較好用,在查詢方法設計上可以靈活的根據(jù) Criteria 的特點來方便地進行查詢條件的組裝。所以現(xiàn)在對 Hibernate 的 Criteria 深入研究一下。《 Hibernate Reference 》及網(wǎng)上其它一些資料對 Criteria 已經(jīng)做了很多介紹。本文主要是從 Criteria 的結構入手來進行分析。
如圖 1 。 Hibernate 設計了 Criteriaspecification 作為 Criteria 的頂級接口,其下面提供了 Criteria 和 DetachedCriteria 。
Criteria 和 DetachedCriteria 的主要區(qū)別在于創(chuàng)建的形式不一樣, Criteria 是在線的,所以它是由 Hibernate session 進行創(chuàng)建的;而 DetachedCriteria 是離線的,創(chuàng)建時無需 Session , DetachedCriteria 提供了 4 個靜態(tài)方法 forClass(Class) 或 forEntityName(Name) 進行 DetachedCriteria 實例的創(chuàng)建。 Spring 的框架提供了
getHibernateTemplate().findByCriteria(detachedCriteria) 方法可以很方便地根據(jù)
DetachedCriteria 來返回查詢結果。
如圖 1 , Criteria 和 DetachedCriteria 均可使用 Criterion 和 Projection 設置查詢條件。可以設置 FetchMode( 聯(lián)合查詢抓取的模式 ) ,設置排序方式。對于 Criteria 還可以設置 FlushModel (沖刷 Session 的方式)和 LockMode (數(shù)據(jù)庫鎖模式)。
下面就對 Criterion 和 Projection 進行具體說明。
圖 1
Criterion 是 Criteria 的查詢條件。
Criteria 提供了 add(Criterion criterion) 方法來添加查詢條件。圖 2 是 Criterion 的結構圖。 Criterion 接口的主要實現(xiàn)包括: Example 、 Junction 和 SimpleEXPression 。而 Junction 的實際使用是它的兩個子類 conjunction 和 disjunction ,分別是使用 AND 和 OR 操作符進行來聯(lián)結查詢條件集合。
新聞熱點
疑難解答