Hibernate_day04

1、今天內容

1 hibernate的查詢方式mysql

2 對象導航查詢sql

3 hql查詢數據庫

(1)查詢全部數組

(2)條件查詢session

(3)排序查詢框架

(4)分頁查詢ssh

(5)投影查詢函數

(6)彙集函數使用fetch

4 qbc查詢hibernate

(1)查詢全部

(2)條件查詢

(3)排序查詢

(4)分頁查詢

(5)統計查詢

(6)離線查詢

5 hql多表查詢

(1)mysql多表查詢回顧

(2)hql多表查詢

- 內鏈接、迫切內鏈接、左外鏈接、迫切左外鏈接、右外鏈接

6 hibernate的檢索策略

(1)概念

- hibernate分紅 :當即和延遲查詢

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

(2)具體操做

1、Hibernate查詢方式

1 對象導航查詢

(1)根據id查詢某個客戶,再查詢這個客戶裏面全部的聯繫人

2 OID查詢

(1)根據id查詢某一條記錄,返回對象

3 HQL查詢

(1)Query對象,寫hql語句實現查詢

4 QBC查詢

(1)Criteria對象

5 本地sql查詢

(1)SQLQuery對象,使用普通sql實現查詢

2、對象導航查詢

1 查詢某個客戶裏面全部聯繫人過程,使用對象導航實現 

2 代碼

3、OID查詢

1 根據id查詢記錄

(1)調用session裏面的get方法實現

4、HQL查詢

1 hql:hibernate query language,hibernate提供一種查詢語言,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排序語句寫法

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

分頁查詢

1 mysql實現分頁

(1)使用關鍵字 limit實現

2 在hql中實現分頁

(1)在hql操做中,在語句裏面不能寫limit,hibernate的Query對象封裝兩個方法實現分頁操做

投影查詢

1 投影查詢:查詢不是全部字段值,而是部分字段的值

 

2 投影查詢hql語句寫法:

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

(2)select 後面不能寫 * ,不支持的

 

3 具體實現

彙集函數使用

1 經常使用的彙集函數

(1)count、sum、avg、max、min

 

2 hql彙集函數語句寫法

(1)查詢表記錄數

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

5、QBC查詢

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

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

3 使用qbc,使用Criteria對象實現

查詢全部

1 建立Criteria對象

2 調用方法獲得結果

條件查詢

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

排序查詢

 

 

分頁查詢

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

統計查詢

離線查詢

1 servlet調用service,service調用dao

(1)在dao裏面對數據庫crud操做

(2)在dao裏面使用hibernate框架,使用hibernate框架時候,調用session裏面的方法實現功能

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

6、HQL多表查詢

Mysql裏面多表查詢

1 內鏈接

 

2 左外鏈接

3 右外鏈接

HQL實現多表查詢

Hql多表查詢

(1)內鏈接

(2)左外鏈接

(3)右外鏈接

(4)迫切內鏈接

(5)迫切左外鏈接

HQL內鏈接

1 內鏈接查詢hql語句寫法:以客戶和聯繫人爲例

(1)from  Customer  c  inner  join  c.setLinkMan

返回list,list裏面每部分是數組形式

2 演示迫切內鏈接

(1)迫切內鏈接和內鏈接底層實現同樣的

(2)區別:使用內鏈接返回list中每部分是數組,迫切內鏈接返回list每部分是對象

(3)hql語句寫法

- from  Customer  c  inner  join  fetch  c.setLinkMan

HQL左外鏈接

1 左外鏈接hql語句:

(1)from  Customer  c  left  outer  join  c.setLinkMan

(2)迫切左外鏈接from  Customer  c  left  outer  join  fetch  c.setLinkMan

 

2 左外鏈接返回list中每部分是數組,迫切左外鏈接返回list每部分是對象

 

1 右外鏈接hql語句:

(1)from  Customer  c  right  outer  join  c.setLinkMan

7、Hibernate檢索策略

檢索策略的概念

1 hibernate檢索策略分爲兩類:

(1)當即查詢:根據id查詢,調用get方法,一調用get方法立刻發送語句查詢數據庫

(2)延遲查詢:根據id查詢,還有load方法,調用load方法不會立刻發送語句查詢數據,只有獲得對象裏面的值時候纔會發送語句查詢數據庫

2 延遲查詢分紅兩類:

(1)類級別延遲:根據id查詢返回實體類對象,調用load方法不會立刻發送語句

(2)關聯級別延遲:

- 查詢某個客戶,再查詢這個客戶的全部聯繫人,查詢客戶的全部聯繫人的過程是否須要延遲,這個過程稱爲關聯級別延遲

關聯級別延遲操做

1 在映射文件中進行配置實現

(1)根據客戶獲得全部的聯繫人,在客戶映射文件中配置

 

2 在set標籤上使用屬性

(1)fetch:值select(默認)

(2)lazy:值

- true:延遲(默認)

- false:不延遲

- extra:極其延遲

(1)調用get以後,發送兩條sql語句

 

 

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

批量抓取

1 查詢全部的客戶,返回list集合,遍歷list集合,獲得每一個客戶,獲得每一個客戶的全部聯繫人

(1)上面操做代碼,發送多條sql語句

 

2 在客戶的映射文件中,set標籤配置

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

相關文章
相關標籤/搜索