Hibernate_day04(轉載傳智播客的老師講義,博主只圖檢視方便)
Hibernate_day04
上節內容
1 表與表之間關係回顧 (1)一對多(客戶和聯絡人) (2)多對多(使用者和角色)
2 hibernate一對多操作 (1)一對多對映配置 (2)一對多級聯儲存 (3)一對多級聯刪除 (4)inverse屬性
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多表查詢 (1)mysql多表查詢回顧 (2)hql多表查詢 - 內連線、迫切內連線、左外連線、迫切左外連線、右外連線
6 hibernate的檢索策略 (1)概念 - hibernate分成 :立即和延遲查詢 - 延遲查詢分成:類級別和關聯級別延遲 (2)具體操作 |
Hibernate查詢方式
1 物件導航查詢 (1)根據id查詢某個客戶,再查詢這個客戶裡面所有的聯絡人
2 OID查詢 (1)根據id查詢某一條記錄,返回物件
3 HQL查詢 (1)Query物件,寫hql語句實現查詢
4 QBC查詢 (1)Criteria物件
5 本地sql查詢 (1)SQLQuery物件,使用普通sql實現查詢 |
物件導航查詢
1 查詢某個客戶裡面所有聯絡人過程,使用物件導航實現
2 程式碼 |
OID查詢
1 根據id查詢記錄 (1)呼叫session裡面的get方法實現 |
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 實體類名稱
|
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練習中具體應用 |
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 |
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值,值越大發送語句越少 |