HQL數據查詢

HQL全稱Hibernate Query Language 顧名思義就可以知道HQL的用途就是建立在Hibernate框架的基礎上的查詢語句;

HQL是面向對象的查詢語句,HQL是映射配置的持久化類及其屬性,而SQL則是數據庫表;

HQL語句的形式;

select...from...where...group by...having...order by... 看上去形式跟SQL,所差無幾,但重點在於紅色字體的from字句,正是它使得HQL更加靈活簡便;

使用HQL的注意細節:HQL是面向對象的查詢語言,對關鍵字不區分大小寫(一般小寫),但是對Java類及其屬性的大小寫敏感的;

使用HQL要依靠Query接口:org.hibernate.Query接口;

1.Query接口定義有執行查詢的方法;

2.Query接口支持方法鏈編程風格,使得程序代碼更爲簡潔(使用最多的場景就是查詢參數的動態設置,特別是多參數);


Query實例的創建:

1.Session的createQuery()方法創建;

2.createQuery方法包含一個HQL語句參數,createQuery(hql);

Query執行查詢:

1.Query接口的list()方法執行HQL查詢;

2.list()方法返回結果的數據類型爲java.util.List,List集合中存放符合查詢條件的持久化對象

from子句中持久化類的引用:

1.不需要引入持久化類的全限定名(package.className),而是直接引入類名(from className)即可查詢,因爲hql有auto-import

2.可爲類名起別名from className (as) otherName ,這點跟sql是相類似的

查詢結果返回形式

1.select子句中如果沒有指定返回形式,則默認是list<Object[]>,Object[]數組的數據順序爲select所需數據的順序(select多個元素時使用),如果只select一個元素,則返回list<Object>

2.可使用list作爲返回結果,select中用new list指定,如:select new list(c.id,c.name) from Class c;

3.同理,也可使用map等,這個根據自己習慣而定

4.注意一點,也是很容易忽略的一點,如果是返回自定義類,那麼自定義了構造器之後,一定還要再寫一個無參構造器,這是因爲當在其它地方也用到這個表時,hql是默認調用無參默認構造函數,如果沒有,會運行出錯

5.跟sql一樣,也可使用distinct來去掉結果中重複的數據

6.query.uniqueResult()方法可以返回單個對象,而不再是List,返回對象後要進行強制類型轉換

限制語句---where

1.因大部分限制的運算符都與SQL相同,所以這裏只分析與SQL有差異的運算符

2.在HQL中是允許使用 = , < >(不等於語句的),如:where c.name = null 或where c.name <> null,Hibernate會將其轉爲 is null 或 is not null

3.HQL 允許使用is (not) empty ,與之對應的是SQL的(not) exists

4.HQL的member of對應SQL的in


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