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

weixin_34319999發表於2017-11-15

 生成一條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,如需轉載請自行聯絡原作者

相關文章