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
官方地址未經許可不得轉載