criteria用法概覽

2021-08-31 05:43:56 字數 2759 閱讀 4486

《** lqw8668>

criteria用法

criteria query通過物件導向化的設計,將資料查詢條件封裝為乙個物件。簡單來講,criteria query可以看作是傳統sql的物件化表示,如:

criteria criteria = session.createcriteria(user.class);

criteria.add(expression.eq("name","erica"));

criteria.add(expression.eq("***",new integer(1)));

criteria 查詢表示式

criteria 本身只是乙個查詢容器,具體的查詢條件需要通過criteria.add方法新增到criteria例項中。 如前例所示,expression 物件具體描述了查詢條件。針對sql 語法,expression提供了對應的查詢限定機制,包括:

方法 描述

expression.eq 對應sql「field = value」表示式。 如expression.eq("name","erica")

expression.alleq 引數為乙個map物件,其中包含了多個屬性-值對應關係。相當於多個expression.eq關係的疊加。

expression.gt 對應sql中的 「field > value 」 表示式

expression.ge 對應sql中的 「field >= value」 表示式

expression.lt 對應sql中的 「field < value」 表示式

expression.le 對應sql中的 「field <= value」 表示式

expression.between 對應sql中的 「between」 表示式

如下面的表示式表示年齡(age)位於13到50區間內。

expression.between("age",new

integer(13),new integer(50));

表示式

expression.in 對應sql中的 」field in …」 表示式

expression.eqproperty 用於比較兩個屬性之間的值,對應sql中的「field = field」。 如:

expression.eqproperty( "tuser.groupid", "tgroup.id" );

expression.gtproperty 用於比較兩個屬性之間的值,對應sql中的「field > field」。

expression.geproperty 用於比較兩個屬性之間的值,對應sql中的「field >= field」。

expression.ltproperty 用於比較兩個屬性之間的值,對應sql中的「field < field」。

expression.leproperty 用於比較兩個屬性之間的值,對應sql中的「field <= field」。

expression.and and關係組合。 如:

expression.and( expression.eq("name","erica"), expression.eq( "***", new integer(1) ) );

expression.or or關係組合。 如:

expression.or( expression.eq("name","erica"), expression.eq("name","emma") );

expression.sql 作為補充,本方法提供了原生sql語法的支援。我們可以通過這個方法直接通過sql語句限定查詢條件。 下面的**返回所有名稱以「erica」起始的記錄:

expression.sql( 「lower(.name) like lower(?)」, "erica%", hibernate.string );

其中的「」將由hibernate在執行期使用當前關聯的pojo別名替換。 注意expression 各方法中的屬性名引數(如express.eq中的第乙個引數),這裡 所謂屬性名是pojo中對應實際庫表字段的屬性名(大小寫敏感),而非庫表中的實際欄位名稱。

criteria 高階特性

限定返回的記錄範圍

通過criteria. setfirstresult/setmaxresults 方法可以限制一次查詢返回的記錄範圍:

criteria criteria = session.createcriteria(tuser.class);

//限定查詢返回檢索結果中,從第一百條結果開始的20條記錄

criteria.setfirstresult(100);

criteria.setmaxresults(20);

對查詢結果進行排序

//查詢所有groupid=2的記錄

//並分別按照姓名(順序)和groupid(逆序)排序

criteria criteria = session.createcriteria(tuser.class);

criteria.add(expression.eq("groupid",new integer(2)));

criteria.addorder(order.asc("name"));

criteria.addorder(order.desc("groupid"));

criteria作為一種物件化的查詢封裝模式,不過由於hibernate在實現過程中將精力 更加集中在hql查詢語言上,因此criteria的功能實現還沒做到盡善盡美(這點上,ojb 的criteria 實現倒是值得借鑑),因此,在實際開發中,建議還是採用hibernate 官

Ruby慣用法總結概覽

ruby最近是乙個比較熱門的詞彙,許多程式設計師都開始將目光轉向這項語言。它存在著許多慣用法,下面就向大家總結了一些ruby慣用法,作為參考物件。迭代一般寫法 for i in 1.10 puts i end 習慣寫法 1.10 each 或1.upto 10 from njmzhang 賦值 一般...

Hibernate的Criteria查詢總結

1 常用的查詢限制方法 在例程9 1中,restrictions.eq 方法表示equal,即等於的情況。restrictions類提供了查詢限制機制。它提供了許多方法,以實現查詢限制。這些方法及其他一些criteria常用查詢限制方法列於表9 1中。表9 1 criteria query常用的查詢...

hibernate關於criteria多表查詢問題

在hibernate一對多查詢中關聯查詢的屬性查出來不會被封裝成乙個屬性 list list1 list gethibernatetemplate findbycriteria detachedcriteria,pagebean.getcurrentpage 1 pagebean.getpagesi...