1. 程式人生 > >Hibernate_day04(轉載傳智播客的老師講義,博主只圖檢視方便)

Hibernate_day04(轉載傳智播客的老師講義,博主只圖檢視方便)

Hibernate_day04

上節內容

1 表與表之間關係回顧

1)一對多(客戶和聯絡人)

2)多對多(使用者和角色)

 

2 hibernate一對多操作

1)一對多對映配置

2)一對多級聯儲存

3)一對多級聯刪除

4inverse屬性

 

3 hibernate多對多操作

1)多對多對映配置

2)多對多級聯儲存(重點)

3多對多級聯刪除(瞭解)

4)維護第三張表

今天內容

1 hibernate的查詢方式

 

2 物件導航查詢

 

3 hql

查詢

1)查詢所有

2)條件查詢

3)排序查詢

4)分頁查詢

5)投影查詢

6)聚集函式使用

 

4 qbc查詢

1)查詢所有

2)條件查詢

3)排序查詢

4)分頁查詢

5)統計查詢

6)離線查詢

 

5 hql多表查詢

1mysql多表查詢回顧

2hql多表查詢

- 內連線、迫切內連線、左外連線、迫切左外連線、右外連線

 

6 hibernate的檢索策略

1)概念

- hibernate分成 :立即和延遲查詢

- 延遲查詢分成:類級別和關聯級別延遲

2)具體操作

 

Hibernate查詢方式

1 物件導航查詢

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

 

2 OID查詢

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

 

3 HQL查詢

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

 

4 QBC查詢

1Criteria物件

 

5 本地sql查詢

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

物件導航查詢

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

 

2 程式碼

 

OID查詢

1 根據id查詢記錄

1)呼叫session裡面的get方法實現

 

HQL查詢

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

 

2 常用的hql語句

1)查詢所有: from 實體類名稱

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

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

 

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

1)建立Query物件,寫hql語句

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

 

查詢所有

1 查詢所有客戶記錄

1)建立Query物件,寫hql語句

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

 

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

 

 

條件查詢

1 hql條件查詢語句寫法:

1  from  實體類名稱 where 實體類屬性名稱=? and實體類屬性名稱=?

from  實體類名稱 where 實體類屬性名稱 like ?

 

2 程式碼

模糊查詢

 

排序查詢

1 hql排序語句寫法

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

 

 

 

分頁查詢

1 mysql實現分頁

1)使用關鍵字 limit實現

 

2 hql中實現分頁

1)在hql操作中,在語句裡面不能寫limithibernateQuery物件封裝兩個方法實現分頁操作

 

 

投影查詢

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

 

2 投影查詢hql語句寫法:

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

2select 後面不能寫 * ,不支援的

 

3 具體實現

 

聚集函式使用

1 常用的聚集函式

1countsumavgmaxmin

 

2 hql聚集函式語句寫法

1)查詢表記錄數

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

 

 

QBC查詢

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

 

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

 

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

 

 

 

查詢所有

1 建立Criteria物件

2 呼叫方法得到結果

 

 

條件查詢

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

 

 

排序查詢

 

 

分頁查詢

 

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

 

統計查詢

 

離線查詢

1 servlet呼叫serviceservice呼叫dao

1)在dao裡面對資料庫crud操作

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

 

 

3)在後面ssh練習中具體應用

 

HQL多表查詢

Mysql裡面多表查詢

1 內連線

 

2 左外連線

 

3 右外連線

 

HQL實現多表查詢

Hql多表查詢

1)內連線

2)左外連線

3)右外連線

4)迫切內連線

5)迫切左外連線

HQL內連線

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

1from  Customer  c  inner  join  c.setLinkMan

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

 

2 演示迫切內連線

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

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

3hql語句寫法

- from  Customer  c  inner  join  fetch  c.setLinkMan

 

HQL左外連線

1 左外連線hql語句:

1from  Customer  c  left  outer  join  c.setLinkMan

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

 

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

 

 

 

1 右外連線hql語句:

1from  Customer  c  right  outer  join  c.setLinkMan

 

Hibernate檢索策略

檢索策略的概念

1 hibernate檢索策略分為兩類:

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

 

 

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

 

 

2 延遲查詢分成兩類:

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

 

2)關聯級別延遲:

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

 

 

關聯級別延遲操作

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

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

 

2 set標籤上使用屬性

1fetch:值select(預設)

2lazy:值

- true:延遲(預設)

- false:不延遲

- extra:極其延遲

 

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

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

 

批量抓取

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

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

 

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

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