Criteria條件查找用法淺析

Criteria c = session.createCriteria(User.class);
if(user.getUser_name() != null){
      c.add(Restrictions.like("user_name", user.getUser_name(),MatchMode.END));
}sql


Criteria Query經過面向對象化的設計,將數據查詢條件封裝爲一個對象。簡單來說,Criteria Query能夠看做是傳統SQL的對象化表示,如: 
session

Criteria criteria = session.createCriteria(User.class);
criteria.add(Expression.eq("name","Erica"));
criteria.add(Expression.eq("sex",new Integer(1)));spa


Criteria 查詢表達式 
設計

Criteria 自己只是一個查詢容器,具體的查詢條件須要經過Criteria.add方法添加到Criteria實例中。 如前例所示,Expression 對象具體描述了查詢條件。針對SQL 語法,Expression提供了對應的查詢限定機制,包括: 
orm

方法 描述 
對象

Expression.eq 對應SQL「field = value」表達式。 如Expression.eq("name","Erica") 
排序

Expression.allEq 參數爲一個Map對象,其中包含了多個屬性-值對應關係。至關於多個Expression.eq關係的疊加。 
ci

Expression.gt 對應SQL中的 「field > value 」 表達式 
開發

Expression.ge 對應SQL中的 「field >= value」 表達式 
get

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( "sex", new Integer(1) ) );


Expression.or or關係組合。 如: 

Expression.or( Expression.eq("name","Erica"), Expression.eq("name","Emma") );


Expression.sql 做爲補充,本方法提供了原生SQL語法的支持。咱們能夠經過這個方法直接經過SQL語句限定查詢條件。 下面的代碼返回全部名稱以「Erica」起始的記錄: 

Expression.sql( 「lower({alias}.name) like lower(?)」, "Erica%", Hibernate.STRING );


其中的「{alias}」將由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 官 

方推薦的查詢封裝模式:HQL


官方地址未經許可不得轉載

相關文章
相關標籤/搜索