Hibernate檢索方式-HQL(7)

來源:互聯網
上載者:User

標籤:語言   數位   情況   group by   criteria   機制   stat   query   動態   

Hibernate 提供了以下幾種檢索對象的方式

  (1)導航對象圖檢索方式:  根據已經載入的對象導航到其他對象

  (2)OID 檢索方式:  按照對象的 OID 來檢索對象

  (3)HQL 檢索方式: 使用物件導向的 HQL 查詢語言

  (4)QBC 檢索方式: 使用 QBC(Query By Criteria) API 來檢索對象. 這種 API 封裝了基於字串形式的查詢語句, 提供了更加物件導向的查詢介面. 

  (5)本地 SQL 檢索方式: 使用本機資料庫的 SQL 查詢語句

HQL(Hibernate Query Language) 是物件導向的查詢語言, 它和 SQL 查詢語言有些相似. 在 Hibernate 提供的各種檢索方式中, HQL 是使用最廣的一種檢索方式. 它有如下功能:

  (1)在查詢語句中設定各種查詢條件

  (2)支援投影查詢, 即僅檢索出對象的部分屬性

  (3)支援分頁查詢

  (4)支援串連查詢

  (5)支援分組查詢, 允許使用 HAVING 和 GROUP BY 關鍵字

  (6)提供內建聚集合函式, 如 sum(), min() 和 max()

  (7)支援子查詢

  (8)支援動態綁定參數

  (9)能夠調用 使用者定義的 SQL 函數或標準的 SQL 函數

HQL 檢索方式包括以下步驟:

  (1)通過 Session 的 createQuery() 方法建立一個 Query 對象, 它包括一個 HQL 查詢語句. HQL 查詢語句中可以包含具名引數

  (2)動態綁定參數

  (3)調用 Query 相關方法執行查詢語句.

 Qurey 介面支援方法鏈編程風格, 它的 setXxx() 方法返回自身執行個體, 而不是 void 類型

HQL vs SQL:

  1.HQL 查詢語句是物件導向的, Hibernate 負責解析 HQL 查詢語句, 然後根據對象-關係對應檔中的映射資訊, 把 HQL 查詢語句翻譯成相應的 SQL 陳述式. HQL 查詢語句中的主體是領域模型中的類及類的屬性

  2.SQL 查詢語句是與關聯式資料庫綁定在一起的. SQL 查詢語句中的主體是資料庫表及表的欄位.

綁定參數:

1.Hibernate 的參數綁定機制依賴於 JDBC API 中的 PreparedStatement 的預定義 SQL 陳述式功能.

2.HQL 的參數綁定由兩種形式:

  (1)按參數名字綁定: 在 HQL 查詢語句中定義具名引數, 具名引數以 “:” 開頭.

  (2)按參數位置綁定: 在 HQL 查詢語句中用 “?” 來定義參數位置

3.相關方法:

  (1)setEntity(): 把參數與一個持久化類綁定

  (2)setParameter(): 綁定任意類型的參數. 該方法的第三個參數顯式指定 Hibernate 映射類型

HQL 採用 ORDER BY 關鍵字對查詢結果排序

分頁查詢:

  1.setFirstResult(int firstResult): 設定從哪一個對象開始檢索, 參數 firstResult 表示這個對象在查詢結果中的索引位置, 索引位置的起始值為 0. 預設情況下, Query 從查詢結果中的第一個對象開始檢索

  2.setMaxResults(int maxResults): 設定一次最多檢索出的對象的數目. 在預設情況下, Query 和 Criteria 介面檢索出查詢結果中所有的對象

在對應檔中定義命名查詢語句

  Hibernate 允許在對應檔中定義字串形式的查詢語句. 

  <query> 元素用於定義一個 HQL 查詢語句, 它和 <class> 元素並列.  

  在程式中通過 Session 的 getNamedQuery() 方法擷取查詢語句對應的 Query 對象.

投影查詢:

  投影查詢: 查詢結果僅包含實體的部分屬性. 通過 SELECT 關鍵字實現.

  Query 的 list() 方法返回的集合中包含的是數群組類型的元素, 每個對象數組代表查詢結果的一條記錄

  可以在持久化類中定義一個對象的構造器來封裝投影查詢返回的記錄, 使程式碼能完全運用物件導向的語義來訪問查詢結果集.

  可以通過 DISTINCT 關鍵字來保證查詢結果不會返回重複元素

報表查詢

  報表查詢用於對資料分組和統計, 與 SQL 一樣, HQL 利用 GROUP BY 關鍵字對資料分組, 用 HAVING 關鍵字對分組資料設定約束條件.

   在 HQL 查詢語句中可以調用以下聚集合函式:count()     min()      max()     sum()    avg()

HQL (迫切)左外串連

  LEFT JOIN FETCH 關鍵字表示迫切左外串連檢索策略.

  list() 方法返回的集合中存放實體物件的引用, 每個 Department 對象關聯的 Employee  集合都被初始化, 存放所有關聯的 Employee 的實體物件.

  查詢結果中可能會包含重複元素, 可以通過一個 HashSet 來過濾重複元素

左外串連:

  LEFT JOIN 關鍵字表示左外串連查詢.

  list() 方法返回的集合中存放的是對象數群組類型

  根據設定檔來決定 Employee 集合的檢索策略.

  如果希望 list() 方法返回的集合中僅包含 Department 對象, 可以在HQL 查詢語句中使用 SELECT 關鍵字

HQL (迫切)內串連

  INNER JOIN FETCH 關鍵字表示迫切內串連, 也可以省略 INNER 關鍵字

  list() 方法返回的集合中存放 Department 對象的引用, 每個 Department 對象的 Employee 集合都被初始化, 存放所有關聯的 Employee 對象

內串連:

  INNER JOIN 關鍵字表示內串連, 也可以省略 INNER 關鍵字

  list() 方法的集合中存放的每個元素對應查詢結果的一條記錄, 每個元素都是對象數群組類型 

  如果希望 list() 方法的返回的集合僅包含 Department  對象, 可以在 HQL 查詢語句中使用 SELECT 關鍵字

關聯層級運行時的檢索策略

  如果在 HQL 中沒有顯式指定檢索策略, 將使用對應檔配置的檢索策略.   

  HQL 會忽略對應檔中設定的迫切左外串連檢索策略, 如果希望 HQL 採用迫切左外串連策略, 就必須在 HQL 查詢語句中顯式的指定它 

  若在 HQL 代碼中顯式指定了檢索策略, 就會覆蓋對應檔中配置的檢索策略

 

Hibernate檢索方式-HQL(7)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.