1. 程式人生 > >Hibernate5(2016)——查詢

Hibernate5(2016)——查詢

1.Hibernate查詢方式:

1 物件導航查詢

根據id查某個客戶,再查詢這個客戶裡面所有的聯絡人

2 OID查詢

根據id查詢某一條記錄,返回物件

3 hql查詢

Query物件,寫hql語句實現查詢

4 QBC查詢

Criteria物件

5 本地sql查詢

SQLQuery物件,使用普通sql實現查

2.物件導航查詢:

1 查詢某個客戶裡面所有聯絡人過程,使用物件導航實現

2 程式碼

3.OID查詢:

1 根據id查詢記錄

呼叫session裡面的get方法實現

4.HQL查詢:

1 hql:hibernate query language,hibernate提供一種查詢語言,hql語言和普通的sql語言相似,區別:普通sql語言操作資料庫和欄位,hql語言操作實體類和屬性

2 常用的hql語句

查詢所有:from 實體類名稱

條件查詢:from 實體類名稱 where 實體類屬性名稱=? And 實體類屬性名稱=?

條件查詢:from 實體類名稱 where 實體類屬性名稱 like ?(模糊查詢)

排序查詢:from 實體類名稱 order by 實體類屬性名稱 asc/desc

3 使用hql查詢操作時候,使用Query物件

建立Query物件,寫hql語句

呼叫query物件裡面的方法得到結果

4.1 查詢所有:

1 查詢所有客戶記錄

建立Query物件,寫hql語句

呼叫query物件裡面的方法得到結果

2 查詢所有:from 實體類名稱

4.2 條件查詢:

1 hql條件查詢語句寫法:

from 實體類名稱 where 實體類屬性名稱=? And 實體類屬性名稱=?

from 實體類名稱 where 實體類屬性名稱 like ?(模糊查詢)

2 程式碼

3 模糊查詢

4.3 排序查詢:

1 hql 排序語句寫法

from 實體類名稱 order by 實體類屬性名稱 asc/desc

4.4 分頁查詢:

1 mysql實現分頁

使用關鍵字limit實現

2 在hql中實現分頁

在hql操作中,在語句中不能寫limit,hibernate的Query物件封裝了兩個方法實現分頁操作

4.5 投影查詢:

1 投影查詢:查詢的不是所有欄位的值,而是部分欄位的值

2 投影查詢hql語句寫法

select 實體類屬性名稱1,實體類屬性名稱2 from 實體類名稱

select後面不能寫*,不支援

3 具體實現

4.6 聚集函式使用:

1 常用的聚集函式

count、sum(+)、avg(平均數)、max、min

2 hql聚集函式語句寫法

查詢表記錄數

-select count(*) from 實體類名稱

5.QBC查詢:

1 使用hql查詢需要寫hql語句實現,但是使用qbc時候,不需要寫語句了,使用方法實現

2 使用qbc時候,操作實體類和屬性

3 使用qbc時候,使用Criteria物件實現

5.1 查詢所有:

1 建立Criteria物件

2 呼叫方法得到結果

5.2 條件查詢:

1 沒有語句,使用封裝的方法實現

5.3 排序查詢:

5.4 分頁查詢:

開始位置計算公式:(當前頁-1)*每頁記錄數

5.5 統計查詢:

5.6 離線查詢:

1 servlet呼叫service,service呼叫dao

在dao裡面對資料庫crud操作

在dao裡面使用hibernate框架,使用hibernate時候,呼叫session裡面的方法實現功能

6.HQL多表查詢:

6.1 Mysql裡面多表查詢:

6.2 HQL中實現多表查詢:

Hql多表查詢

內連線

左外連線

右外連線

迫切內連線

迫切左外連線

6.3 HQL內連線:

1 內連線查詢hql語句寫法:以客戶和聯絡人為例

from  Customer  c  inner  join  c.setLinkMan

返回list,list裡面每部分是陣列形式

2 演示迫切內連線

迫切內連線和內連線底層實現一樣的

區別:使用內連線返回list中每部分是陣列,迫切內連線返回list每部分是物件

Hql語句寫法:from  Customer  c  inner  join  fetch  c.setLinkMan

6.4 HQL左外連線:

1 左外連線hql語句:

from  Customer  c  left  outer  join  c.setLinkMan

迫切左外連線from  Customer  c  left  outer  join  fetch  c.setLinkMan

2 左外連線返回list中每部分是陣列,迫切左外連線返回list每部分是物件

3 右外連線hql語句:

from  Customer  c  right  outer  join  c.setLinkMan

7.Hibernate檢索策略:

7.1 檢索策略的概念:

1 hibernate檢索策略分為兩類:

立即查詢:根據id查詢,呼叫get方法,一呼叫get方法馬上傳送語句查詢資料庫

延遲查詢:根據id查詢,還有load方法,呼叫load方法不會馬上傳送語句查詢資料庫,只有得到物件裡面的值時候才會傳送語句查詢資料庫

2 延遲查詢分為兩類

類級別延遲:根據id查詢返回實體類物件,呼叫load方法不會馬上傳送語句

關聯級別延遲:

-查詢某個客戶,再查詢這個客戶的所有聯絡人,查詢客戶的所有聯絡人的過程是否需要延遲,這個過程稱為關聯級別延遲

7.2 關聯級別延遲操作:

1 在對映檔案中進行配置實現

根據客戶得到所有的聯絡人,在客戶對映檔案中配置

2 在set標籤上使用屬性

Fetch:值select(預設)

Lazy:值

-true:延遲(預設)

-false:不延遲

-extra:極其延遲

呼叫get之後,傳送兩條sql語句

極其懶惰,要什麼值給什麼值

7.3 批量抓取:

1 查詢所有客戶,返回list集合,遍歷list集合,得到每個客戶,得到每個客戶的所有聯絡人

上面操作程式碼,傳送多條語句

2 在客戶的對映檔案中,set標籤配置

batch-size值,值越大發送語句越少