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