Hibernate Critiria 進階查詢

薛泰綸 2016/12/21 15:41:22
1564







主題

Hibernate Criteria 進階查詢

文章簡介

介紹Hibernate Criteria標準查詢,透過簡單的範例,讓讀者了解Hibernate Criteria進階查詢的使用方式

作者

薛泰綸

版本/產出日期

3.0/2016.12.14




1. 前言

• 要操作資料庫最基本的就是使用SQL語法,Hibernate CriteriaSQL進行封裝,讓不了解SQL使用與撰寫的Java程式開發人員,以物件導向模型的方式,透過Hibernate Criteria所提供的API來進行SQL語句查詢。

• 本文將介紹Hibernate Criteriar進階查詢功能及使用方式。

• 開發工具使用Eclipse Java EE IDE Luna Service Release 2 (4.4.2) 

• 本文件適用於Hibernate開發。






2. 目的

• 步了解Hibernate Criteria進階查詢方式。

• 了解如何利用Hibernate Criteria開發應用程式。




3. 版本與環境

本架構建立於以下版本的環境:

• Eclipse Java EE IDE Luna Service Release 2 (4.4.2)

• JDK 7

• Hibernate 3

• Oracle PL/SQL Developer




4. Criteria進階查詢步驟與介紹:

進階查詢方式介紹及Demo:



注意: 如果想要設定查詢條件,則要使用Restrictions的各種靜態方法傳回Criteria實例,傳回的每個Criteria 實例代表著一個條件,您要使用Criteriaadd()方法加入這些條件


建立資料庫資料



如果對進階語法有疑問的話可以參考 Hibernate Criteria 基本查詢

我的上一篇文章。

以下先介紹這次DemoDB欄位資料。



DB欄位:



DB資料:




接著我們就可以Demo Critiria進階查詢:


進階查詢(設定條件,對應sql where enddate between ‘? and ‘?’)




※使用Critiria的時候不用另外加上Where的關鍵字。

※每一次對Critiria進行add方法的時候,都會自動幫你加上and 關鍵字。



Hibernate 建立的查詢語法:



查詢之後資料為:





設定SQL範本

如果您了解如何撰寫SQL語句,想要設定一些Hibernate產生SQL時的範本,您也可以使用Restrictions的sqlRestriction()方法,提供SQL語法範本作限定查詢,例如查詢titleno.6結尾的資料:





其中alias將被替換為與TestDataTable類別相關的名稱,而? 將被替換為%no.6,也就是第二個參數所提供的值,最後告訴hibernate 置換的參數的型態。



Hibernate 就幫我們產出了SQL





查詢之後資料為:





如果有多個查詢條件(例如between)也可以使用相同方法範例如下:




需要使用陣列替換需要的參數。


下列為Hibernate產出的語可以觀察一下





查詢出來的資料如下:





Hibernate 也提供統計方法


您可以對查詢結果進行統計動作,使用 org.hibernate.criterion.Projectionsavg()、rowCount()、count()、max()、min ()、 countDistinct()等方法,再搭配Criteria的setProjection()方法加入條件設定,例如對查詢結果的"startdate"作分組





上面的程式將由Hibernate自動產生SQL的group by子句進行分組計算:





如果想同時結合統計與分組功能,則可以使用ProjectionList





觀察所產生的SQL語句,將使用group by先進行分組,再針對每個分組進行count函數的計數





這裡示範的都是對單一table進行操作,如果對多個table就要再hibernate裡面設定一對多或是多對一的佈署。


5. 總結


Hibernate 建議開發者使用他們的標準查詢語法,以及HQL語法,工程師在開發的過程中可以參考這些語法降低開發時間。



6. 參考來源


• Hibernate 官方網站

https://docs.jboss.org/hibernate/core/3.3/api/org/hibernate/Criteria.html

• 良葛格學習筆記

http://openhome.cc/Gossip/index.html

• Hibernate3.x   應用

http://www.tpisoftware.com/tpu/

Hibernate Critiria 基礎查詢

http://www.tpisoftware.com/tpu/

薛泰綸