1. 程式人生 > >WEB開發(7) Hibernate篇(下) HQL語言

WEB開發(7) Hibernate篇(下) HQL語言

HQL查詢語言

Hibernate查詢語言為Hibernate Query Language。

HQL概述

- 有SQL中的select、from、order by、count()、where等關鍵字。

- 但是跟的不是表名,而是實體類名,也可以是實體類物件的屬性或其他值。

- 簡化寫法“ from Cat ",將會在當前持久化的容器中查詢所有的Cat實體類物件。

- 此外,對關鍵字大小寫不敏感,但是對類名、包名、屬性名必須大小寫一致

區分不同類要加上包名

返回型別

HQL查詢單個物件

Number是所有常用資料型別的父類,能夠使用相應的方法進行轉換。

HQL返回集合屬性

第二個查詢體現了HQL的面向物件類的強大功能,能夠把類中的屬性查詢出來。

同時返回多個物件

查詢部分屬性,每一條資料可以存放在(一個Object[]陣列 or 一個List or Map)裡,這些個查詢的資料總共又構成了一個List。

Object[]陣列的

List型別的

Map型別的

直接返回實體物件也可以,即使只取部分的屬性。

條件查詢

用" : variable "的方式留下引數,然後再setParameter中逐一去配置。

HQL支援的運算子和SQL基本類似

一些關鍵字的例子

查詢條件用傳參的方法setParameter()分開寫,能夠提高HQL執行效率

統計函式

返回值的型別是不確定的,需要用Number類來進行轉換。

HQL分頁顯示

注意,setMaxResults(10)是取10條資料出來的意思。

跨表查詢

如果當前實體類中有另外一個實體類的物件,直接用dot點呼叫就能實現跨表。

 級聯查詢

使用SQL資料庫

使用SQLQuery

直接執行SQL語句

返回實體型別

直接用SQL的話需要設定相應的實體類,便於輸出

命名常用查詢

1)@配置命名查詢

@NameQuery用於HQL,@NameNativeQuery用於SQL

設定查詢拓展

知道一下可以拓展功能就行了

 設定多個命名查詢

    // 硬敲HQL程式碼查詢
    List<Post> list = session
                      .createQuery("select p from Post p left join fetch " 
                      + "p.tags t where t.name = :name")
                      .setParameter("name", "Humor").list();

    // 用配置命名查詢
	List<Post> list = session
                      .getNamedQuery("postByTag")   //注意這一行用getNameQuery()
                      .setParameter("name", "Humor").list();

 

優點:

a. 命名查詢(named query)在會話工廠初始化的時候就被初始化了,能夠很快排查bug  

b. 命名查詢提供了顯著的編碼效率

缺點:

a. 無法在執行時定製化,因此不能適應動態的查詢

b. 因為是靜態的,如果更改這些查詢的話需要重新啟動載入SessionFactory

 

*** 簡單來說就是給HQL語句起外號,省得經常用到查詢還得敲HQL。

 2)XML配置命名查詢

Hibernate貢獻:面向物件化地對資料庫進行處理。