hibernate查詢方式
1 對象導航查詢
(1)根據id查詢某個客戶,再查詢這個客戶裡面所有的聯系人
2 OID查詢
(1)根據id查詢某一條記錄,傳回對象
3 HQL查詢
(1)Query對象,寫hql語句實作查詢
4 QBC查詢
(1)Criteria對象
5 本地sql查詢
(1)SQLQuery對象,使用普通sql實作查詢
對象導航查詢
1 查詢某個客戶裡面所有聯系人過程,使用對象導航實作

2 代碼
public class TestQuery{
Session session = null;
Transaction transaction =null;
SessionFactory sessionFactory =null;
@Test
public void testTogertherSave(){
try{
//與本地綁定的session
sessionFactory = HibernateUtil.getSessionFactory();
session= sessionFactory.openSession();
transaction=session.beginTransaction();
//查詢客戶id1的客戶,然後在查詢id1的客戶下面的所有聯系人
Customer customer = session.get(Customer.class, 1);
Set<LinkMan> linkMEN = customer.getSet();
for (LinkMan man : linkMEN) {
System.out.println(man);
}
//送出
transaction.commit();
}catch (Exception e){
e.printStackTrace();
//復原
transaction.rollback();
}finally {
session.close();
sessionFactory.close();
}
}
}
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對象裡面的方法得到結果
條件查詢
1 hql條件查詢語句寫法:
(1) from 實體類名稱 where 實體類屬性名稱=? and實體類屬性名稱=?
from 實體類名稱 where 實體類屬性名稱 like ?
2 代碼
模糊查詢
排序查詢
1 hql排序語句寫法
(1)from 實體類名稱 order by 實體類屬性名稱 asc/desc
分頁查詢
1 mysql實作分頁
(1)使用關鍵字 limit實作
select * from xxx where cname = ? limit 0 3
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 實體類名稱
Hibernate筆記(四)hibernate查詢方式、HQL查詢、QBC查詢、HQL多表查詢、hibernate檢索政策hibernate查詢方式
QBC查詢
1 使用hql查詢需要寫hql語句實作,但是使用qbc時候,不需要寫語句了,使用方法實作
2 使用qbc時候,操作實體類和屬性
3 使用qbc,使用Criteria對象實作
查詢所有
1 建立Criteria對象
2 調用方法得到結果
條件查詢
1 沒有語句,使用封裝的方法實作
Restricions類裡面有大量靜态方法
排序查詢
分頁查詢
統計查詢
離線查詢
1 servlet調用service,service調用dao
(1)在dao裡面對資料庫crud操作
(2)在dao裡面使用hibernate架構,使用hibernate架構時候,調用session裡面的方法實作功能
HQL多表查詢
1 内連接配接
2 左外連接配接
3 右外連接配接
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
c.setLinkManfetch
Hibernate筆記(四)hibernate查詢方式、HQL查詢、QBC查詢、HQL多表查詢、hibernate檢索政策hibernate查詢方式
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:極其延遲
Hibernate筆記(四)hibernate查詢方式、HQL查詢、QBC查詢、HQL多表查詢、hibernate檢索政策hibernate查詢方式
(1)調用get之後,發送兩條sql語句
(1)極其懶惰,要什麼值給什麼值
批量抓取
什麼是抓取政策?
抓取政策是當應用程式需要在(Hibernate實體對象圖的)關聯關系間進行導航的時候,Hibernate
如何擷取關聯對象的政策。
Hibernate的抓取政策是Hibernate提升性能的一種手段,可以在擷取關聯對象的時候,對發送的
語句進行優化,但是往往抓取政策需要和延遲加載一起使用來提升性能。我們首先來學習一下延遲
加載的相關内容吧。
在學習延遲加載内容之前,我們需要了解延遲加載的分類。
1 查詢所有的客戶,傳回list集合,周遊list集合,得到每個客戶,得到每個客戶的所有聯系人
(1)上面操作代碼,發送多條sql語句
2 在客戶的映射檔案中,set标簽配置
(1)batch-size值,值越大發送語句越少