java criteria and_criteria用法
Criteria Query通過面向對象化的設計,將數據查詢條件封裝為一個對象。簡單來講,Criteria Query可以看作是傳統SQL的對象化表示,如:
Java代碼
Criteria criteria = session.createCriteria(User.class);
criteria.add(Expression.eq("name","Erica"));
criteria.add(Expression.eq("sex",new Integer(1)));
Criteria 查詢表達式
Criteria 本身只是一個查詢容器,具體的查詢條件需要通過Criteria.add方法添加到Criteria實例中。 如前例所示,Expression 對象具體描述了查詢條件。針對SQL 語法,Expression提供了對應的查詢限定機制,包括:
Java代碼
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區間內。
Java代碼
Expression.between("age",new Integer(13),new Integer(50));
表達式
Java代碼
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( "sex", new Integer(1) ) );
Expression.or or關系組合。 如:
Expression.or( Expression.eq("name","Erica"), Expression.eq("name","Emma") );
Expression.sql 作為補充,本方法提供了原生SQL語法的支持。我們可以通過這個方法直接通過SQL語句限定查詢條件。 下面的代碼返回所有名稱以“Erica”起始的記錄:
Java代碼
Expression.sql( “lower({alias}.name) like lower(?)”, "Erica%", Hibernate.STRING );
Expression.sql( “lower({alias}.name) like lower(?)”, "Erica%", Hibernate.STRING );
其中的“{alias}”將由Hibernate在運行期使用當前關聯的POJO別名替換。 注意Expression 各方法中的屬性名參數(如Express.eq中的第一個參數),這里 所謂屬性名是POJO中對應實際庫表字段的屬性名(大小寫敏感),而非庫表中的實際字段名稱。
Criteria 高級特性
限定返回的記錄范圍
通過criteria. setFirstResult/setMaxResults 方法可以限制一次查詢返回的記錄范圍:
Java代碼
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 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"));
分享到:
2009-06-01 09:20
瀏覽 7961
評論
2 樓
senhui19
2010-11-12
嗯,寫的不錯,收藏起來方便以后查看,呵呵~~
1 樓
hanz188
2010-07-30
樓主總結的真好,我看完之后基本上就了解了criteria的概念和用法了。如果頁面能夠重新排下版就更好了,另外,最后一段代碼重復了,能不能刪除一個。
總結
以上是生活随笔為你收集整理的java criteria and_criteria用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 源码包编译安装python_Python
- 下一篇: 股票分红的钱是公司拿出来的吗?