Hibernate學習(八):檢索方式

來源:互聯網
上載者:User

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

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

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

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

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

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.