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值,值越大發送語句越少