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