在Hibaernate中提供了豐富的檢索(查詢)方式,由於項目中涉及到查詢特別是複雜查詢的時候基本上用的都市iBatis,因此一直都沒怎麼用Hibaernate自帶的查詢方法。總的說來Hibernate有以下集中查詢方式:sql
1.根據OID檢索某條指定的記錄,典型方法如session.load()和session.get();數據庫
2.HQL檢索方式。HQL是Hibernate Query Language的所寫,形式相似SQL語句,只session
不過它是面向對象的,從某種程度上而言,你能夠說HQL是面向對象的查詢語句,而SQL是面向關係的查詢語句。使用這種檢索方式的典型方法是session.createQuery(String hql),在Hibernate2.0中還有一個session.find方法也是採用的這種檢索方式,不過已淘汰了;ide
3.QBC檢索方式。使用Criteria接口的API來檢索對象。它封裝了基於字符串形式的查詢語句,提供了更加面向對象的接口。spa
4.原生SQL檢索。使用本地數據庫的SQL查詢語句。Hibernate會負責把檢索到的JDBC ResultSet結果集映射爲持久化對象圖。典型方法如session.createSQLQuery(String sql);orm
第一種檢索方式使用的已經很廣泛了,並且也十分簡單,下面主要看後三種檢索方式。對象
一.HQL檢索方式繼承
代碼片斷以下:接口
…………………………………………………………………………………………ci
Query query=session.createQuery(「from Customer as c where c.name=:name」);
query.setString(「name」,」CMTobby」);
List result=query.list();
…………………………………………………………………………………………
一個典型的HQL檢索能夠分爲3個步驟:
1.建立一個Query類型的對象,它包含一個HQL語句;如上面紅底的代碼,注意from後面跟的是類名而不是表名;
2.動態綁定參數(若是使用了動態參數的話)。動態綁定參數有兩種方式:命名參數綁定和位置參數綁定。上例中採用的命名參數綁定,形式是「冒號:參數名」。還有一種位置參數綁定,以下:
Query query=session.createQuery(「from Customer as c where c.name=?」);
query.setString(0,」CMTobby」);
這個方式同JDBC中的預編譯方式類似。當同時使用命名參數和位置參數時,位置參數必須出如今命名參數以前,不然運行出錯。以下面的代碼:
Query query=session.createQuery(「from Customer as c where c.name=:name and c.sex=?」);
query.setString(0,」F」);
query.setString(「name」,」CMTobby」);
運行時會報錯:cannot define positional parameter after any named parameters have been defined
3.調用list()方法執行查詢語句。
二.QBC檢索方式
代碼片斷以下:
…………………………………………………………………………………………
Criteria criteria=session.createCriteria(Customer.class);
Criterion criterion1=Expression.eq("sex", "F");
Criterion criterion2=Expression.like("name", "%sb1%");
criteria.add(criterion1);
criteria.add(criterion2);
Result list= criteria.list();
…………………………………………………………………………………………
一個典型的QBC能夠分爲以下幾個步驟:
1.建立一個Criteria類型的對象。上面的紅色代碼所示。這裏咱們能夠看出QBC是面向對象的,而且顯然不支持多表的聯合查詢,由於它是針對某個持久化類進行的。
2.指定查詢條件,如上面的綠色代碼所示。每個Criterion類型的對象表明一個查詢條件,把全部的Criterion類型對象增長到Criteria中,Criteria能夠當作是一個Criterion的集合,在英文中Criteria就是Criterion的複數形式,所以瞭解點e文對於咱們理解程序仍是有幫助的,^_^。指定查詢條件咱們使用的是Expression類,它繼承自Restrictions類,它裏面定義了不少設定查詢條件的方法,詳細狀況能夠看它的API文檔。
3.調用list()方法執行查詢語句。
三.使用原生SQL檢索(Native SQL)
一個典型的代碼以下所示:
…………………………………………………………………………………………
Query query=session.createSQLQuery(「selct * from CUSTOMORS where name=:name」);
query.setString(「name」,」CMTobby」);
List result=query.list();
…………………………………………………………………………………………
這種檢索方式和HQL檢索方式很是相似,只不過查詢語句的風格不一樣而已,就不詳細說明了。