1. 導航對象圖查詢:根據(jù)已加載的對象,導航到其他對象 例如,對于已經(jīng)加載的Customer對象,調(diào)用它的getOrders().iterator()方法就可以導航到所有關(guān)聯(lián)的Order對象,假如在關(guān)聯(lián)級別使用了延遲加載檢索策略,那么首次執(zhí)行此方法時,hibernate會從數(shù)據(jù)庫中加載關(guān)聯(lián)的Order對象,否則就從緩存中獲得Order對象。
2. OID方式:按照對象的OID來檢索對象 Session的get()和load()方法提供了這種功能,如果在應(yīng)用程序中先知道了OID,就可以使用這種方式檢索對象。 get()和load()的用法完全一樣,都需要兩個參數(shù),一個是持久化對象類名class,一個是行號OID,返回固定的某一行的數(shù)據(jù),但是需要注意的是,當輸入的OID不存在時,get()會返回一個空對象,load()則直接報錯。
3. HQL檢索方式(hibernate query language) 使用面向?qū)ο蟮腍QL查詢語言,session的find()方法用于執(zhí)行HQL查詢語句。此外,hibernate還提供了query接口,它是hibernate提供的專門的HQL查詢接口,能夠執(zhí)行各種復(fù)雜的HQL查詢語句。
它具備以下功能:
- 在查詢語句中設(shè)定各種查詢條件;
- 支持投影查詢,即僅檢索出對象的部分屬性;
- 支持分頁查詢;
- 支持連接查詢;
- 支持分組查詢;
- 提供內(nèi)置函數(shù);
- 能夠調(diào)用用戶自定義的SQL函數(shù);
- 支持子查詢;
- 支持動態(tài)綁定參數(shù); 例如:Query query = session.createQuery(“from UserPo”); 獲得一個query對象,注意參數(shù)字符串中不是一個SQL語句,from后面的是持久化對象名稱; List list = query.list(); 就可以獲取數(shù)據(jù)庫中對應(yīng)表的數(shù)據(jù)集合。
4. QBC檢索方式:Query By Criteria的API來檢索對象,這種API封裝了基于字符串形式的查詢語句,提供了更加面向?qū)ο蟮慕涌凇?/p>
例如: Criteria criteria = session.createCriteria(UserPo.class); 創(chuàng)建一個Criteria對象,參數(shù)是所關(guān)聯(lián)的持久化對象,criteria.add(Restrictions.ge("id",2));將查詢條件加入對象中,后面的操作就和Query對象一樣了。
5. 利用原生SQL語句進行查詢