《** 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...