HQL語句

HQL查詢

HQL是Hibernate Query Language的縮寫,HQL的語法很像SQL的語法,但是HQL是一種面向對象的查詢語言。

因此,SQL的操作對象的數據表和列等數據對象,而HQL的操作對象是類、實例、屬性等。

HQL是完全面向對象的查詢語言,因此可以支持繼承和多態等特徵。

HQL查詢依賴Query類,每個Query實例對應一個查詢對象。

1、通常,set xxx()方法的返回值都是void,但是hibernate  Query的set XXX()方法的返回值是Query本書,

因此,程序通過Session創建Query後,直接多次調用set XXX()方法爲HQL語句的參數賦值,再直接調用list()

方法返回查詢後的全部結果即可。

Query還包含兩個方法:

setFirstResult(int    firstResult),設置返回的結果集從第幾條記錄開始

setMaxResult(int   maxResult),設置本次查詢返回的結果數。

這兩個方法用於實現Hibernate分頁。

2、HQL查詢的聚集函數

avg —— 計算屬性的平均值

count —— 統計選擇對象的數量

max —— 統計屬性值的最大值

min —— 統計屬性值的最小值

sum —— 計算屬性值的總和。

Example:

 select count (*) from  Person  查詢Person類中實例的個數

select max (p.age) from Person  as p  查詢Person類中年齡的最大值

3、HQL查詢的where子句

where子句用於篩選選中的結果,縮小選擇的範圍。如果沒有爲持久化實例命名別名,

可以直接使用屬性名引用。

如: from  Person where name like ' tom% ' 等同於 from  Person as p where p.name like " tom% "

返回name屬性以tom開頭的實例。

4、表達式

HQL的功能非常豐富,where子句後支持的運算符異常豐富,不近包括SQL的運算符,還包括EJB-QL的運算符

where子句中允許使用大部分SQL支持的表達式:

數學運算符: +、-、*、/等

二進制比較運算符:=、 >=、 <=、 <>、!=、like等

邏輯運算符:and、or 、not等

in、not  in 、  between 、 is null 、  is  not  null 、  is empty  、  member of 和not   member  of等。

簡單的case、 case....when..then...else...end和case、case  when.....then....else....end等

字符串連接符value1 || value2 或使用字符串連接函數  concat(value1,value2)。

時間操作函數 current_date()、 current_time()、current_timestamp()、second()、minute()、hour()、

day()、month()、year()等。

HQL還支持EJB_QL3.0所支持的函數或操作substring()、trim()、lower()、upper()、length()、

locate()、abs()、sqrt()、bit_length()、coalesce()和nullif()等

Example:

in 與 between....and的用法:

from Person p where p.name between ' A 'and '  B  '

from Person p where p.name in (”abc“,"tom","joan")

5、 order  by  子句

查詢返回的列表(list)可以根據類或組件屬性的任何屬性值進行排序。

Example:

from Person as p  order by p.name,p.age 根據人的名字和年齡升序排列

from Person as p order by p . age desc    根據人的年齡倒序排列

默認情況下是升序即asc,用desc則是倒序排列。

發佈了22 篇原創文章 · 獲贊 13 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章