Hibernate學習(八):檢索方式

Hibaernate中提供了豐富的檢索(查詢)方式,因爲項目中涉及到查詢特別是複雜查詢的時候基本上用的都市iBatis,所以一直都沒怎麼用Hibaernate自帶的查詢方法。總的說來Hibernate有如下集中查詢方式:

1.根據OID檢索某條指定的記錄,典型方法如session.load()session.get()

2HQL檢索方式。HQLHibernate Query Language的所寫,形式類似SQL語句,只

不過它是面向對象的,從某種程度上而言,你可以說HQL是面向對象的查詢語句,而SQL是面向關係的查詢語句。使用這種檢索方式的典型方法是session.createQuery(String hql),在Hibernate2.0中還有一個session.find方法也是採用的這種檢索方式,不過已淘汰了;

3QBC檢索方式。使用Criteria接口的API來檢索對象。它封裝了基於字符串形式的查詢語句,提供了更加面向對象的接口。

4.原生SQL檢索。使用本地數據庫的SQL查詢語句。Hibernate會負責把檢索到的JDBC ResultSet結果集映射爲持久化對象圖。典型方法如session.createSQLQuery(String sql)

第一種檢索方式使用的已經很普遍了,而且也十分簡單,下面主要看後三種檢索方式。

一.HQL檢索方式

代碼片段如下:

…………………………………………………………………………………………

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檢索方式非常類似,只不過查詢語句的風格不同而已,就不詳細說明了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章