天天看點

【Hibernate架構開發之八】Hibernate 查詢語言Query Language(HQL)

 生成一條HQL查詢語句  Query,  使用Session的createQuery("hql語句")生成Query

HQL語句:

1. “from className”

class是類名;Hibernate會自動到資料庫中找對應生成的表;

2.“from className cn where cn.name > 'xx'”

cn 是className的别名,  'xx'表示條件

3. "from ClassName cn order by cn.name desc"

按照className的名字倒序排列

4. "select distinct cn from ClassName cn order by cn.name desc"

互相之間不會重複的對象(主鍵不同)的按照倒序排列

5. "from ClassName cn where cn.id > :min and cn.id< :max"

然後設定其Parameter(min和max)   :

query.setParameter("min", 2);           query.setParameter("max", 8);

query.setInteger("min", 2);                  query.setInteger("max", 8);

(兩段實作相同功能,使用setParameter則自動轉換類型,下面屬于手動轉換類型);

6."select cn.id,cn.name from ClassName cn order by cn.name desc"

取出特定的兩個字段 id 和 name

7. "from ClassName cn where cn.group.id =1 "

找到在ClassName生成的表中中的group對象的id為1的那個ClassName對象

8.  "select cn.id,g.name from ClassName cn Join cn.group g"

映射ClassName的cn.id對應ClassName中group對象裡的name屬性;join 建立導航關系

9.  "select count(*) from ClassName cn"

使用聚合函數, 注意count(*)傳回Long類型;

10. "select max(cn.id), min(cn.id), avg(cn.id), sum(cn.id) from ClassName cn"

聚合函數

11. "from ClassName cn where cn.id between 3 and 7"

兩者之間

12. "from ClassName cn where cn.id in (3,4,5)"

是否在其中

13. "from ClassName cn where cn.name is not null"

不為null

14.   "from ClassName cn where cn.set is empty"

判斷集合屬性是否為空

is not empty 測試某一個屬性是否為空

15.  "from ClassName cn where cn.name like '%4'"

"from ClassName cn where cn.name like '_4'"

%: 表示0個或者多個

_:表示一個

16."select lower(cn.name),lower(cn.name),upper(cn.name),trim(cn.name),concat(cn.name),length(cn.name) from ClassName cn"

一些常用函數

17. "select abs(cn.id),sqrt(cn.id) from ClassName cn"

一些函數

18. "select current_date,current_time,current_timestamp,t.id from ClassName t"

時間日期

19. "from ClassName cn where cn.createDate < :date"

日期的比較

20. "select cn.name,count(*) from ClassName cn group by cn.name"

.分組查詢

21. "select cn.name,count(*) from ClassName cn group by cn.name having count(*) >= 2"

.

22. "from ClassName cn where cn.id < (select avg(cn.id) from ClassName cn)"

哪個id值<平均值

23. "from ClassName cn where cn.id < ALL(select cn.id from ClassName cn where mod(cn.id ,2) = 0)"

id 小于ALL(2,4,6,8)所有值   ps..小于最小值 =   select min

24. "update ClassName cn set cn.name = upper(cn.name)"

更新

Query函數:

1. Query 中 有個 list()函數,直接擷取其資料傳回一個list對象;

2. Query 中uniqueResult()函數,得到唯一傳回的值;

3. executeUpdate() 更新

本文轉自 xiaominghimi 51CTO部落格,原文連結:http://blog.51cto.com/xiaominghimi/969787,如需轉載請自行聯系原作者