Hibernate 之HQL資料查詢,hibernatehql

來源:互聯網
上載者:User

Hibernate 之HQL資料查詢,hibernatehql

1. HQL簡介

  HQL是物件導向的查詢語言,與SQL查詢語言相比,雖然在文法上類似,都是運行時進行解析,但HQL並不像SQL那樣操作的是資料表,列等資料庫物件,HQL所操作的對象是類,對象,屬性等。它也可以支援繼承和多態等特徵,在Hibernate 提供的各種檢索方式中,HQL是使用最廣泛的。

2. Query介面

  Hibernate架構負責解析HQL語句,根據映射配置資訊,把HQL查詢語句解析成相應的SQL語句來執行資料庫的查詢操作。這一過程依賴的就是Query介面。Query的執行個體由Session的createQuery()方法建立,方法中包含一個HQL語句參數。Query介面的list()方法執行HQL查詢,list()方法返回結果為List集合,集合中存放符合查詢條件的持久化對象。

3.檢索對象——from子句

  將兩個實體Commodity(商品)和Seller(商家)設定單向多對一關聯性,兩者都有相應的資料。用JUnit進行測試。

3.1 輸出商品名稱和所屬商家的名稱

控制台輸出:

  可以看到,第一條語句是查詢商品表獲得所有的商品資訊,並輸出第一件商品名稱。接著第二條語句,根據外鍵資訊,查詢商家表獲得商品對應商家名稱。接著輸出下一件商品名稱,注意,因為這件商品對應的商家資訊也是A服裝店,已經做過相應的查詢,這時就不再做新的查詢,而直接使用已有查詢結果A服裝店。當下面遇到新的商家資訊(B數位店)還沒查詢,同樣根據外鍵資訊來查詢商家表。

  這樣的查詢過程,是因為有一個預設的懶載入狀態,Hibernate 預設是不查詢相應的外鍵資訊所對應的資料,當需要的時候,才根據具體的需要做一個臨時查詢。這樣的設定也是為了提高查詢的效率和效能。

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

  在前面編寫的HQL語句中用了 from Commodity ,它的全限定名為 hbb.Commodity,但我們只需要用他的類名即可。在Java中規定使用類時,一定要指定全限定名,這樣java環境才知道去哪擷取這個類。而HQL語句中之所以可以省略是因為 auto-import(自動引入)預設情況。在解析HQL語句的時候,會根據映射配置資訊自動完成持久化類的匯入。當然,在from子句中要使用全限定名也可以。

4. 選擇——select子句

4.1 通過Object[]返回查詢結果

  select子句中未指定返回資料類型,預設為Object[]。

成功執行。如果只查詢一個屬性,依然用Object[]的話,就會報錯,如果只有一個屬性時,list()方法就會返回對象,而不是對象數組,這時需要進行一定調整。

同樣可以直接寫作 List list = query.list();

4.2 通過List返回查詢結果


4.3 通過Map返回查詢結果

  注意get擷取的key值,是字串類型所以需要加""。如果屬性用了別名,可以把序號改為別名。

 5. 通過自訂類型返回查詢結果

  首先需要在持久化類中定義對應的構造器,構造器的參數就是我們要返回的屬性資訊。然後在select子句中調用定義的構造器。以自訂類型返回查詢結果。

 

測試類別中:

  注意:當添加了自訂構造器後,在實體類中還需要添加無參構造器,因為在HQL語句中,當指定了查詢目標(如Seller),Hibernate會調用指定構造器(如new Seller())來封裝,但是如果沒有指定構造器,Hibernate便會調用持久化類中預設的構造器,如前面Hql語句“from Seller”就沒有指定構造器,所以要一個無參構造器來完成相應對象的建立。所以當增加了自訂構造器後,添加無參構造器。

6. Orderby子句

  首先對商家的id進行升序排序,如果id相同情況下按照價格做降序排列,如果還一樣則升序排列。

7. 總結

  HQL語句大小寫敏感,特別是持久化類及其屬性的大小寫。在我們自訂了構造器之後,一定要增加預設構造器。如果你覺得對你有點用的話,請點贊或關注我,謝謝觀看。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.