1、基本文法
<code>session.beginTransaction();</code>
<code>Criteria criteria = session.createCriteria(Person.</code><code>class</code><code>);</code>
<code>SimpleExpression gt = Restrictions.eq(</code><code>"name"</code><code>,</code><code>"張三"</code><code>);</code>
<code>criteria.add(gt);</code>
<code>List<Person> list = criteria.list();</code>
A、 Criteria setFirstResult(int firstResult):設定查詢傳回的第一行記錄(索引從0開始);
B、 Criteria setMaxResult(int maxResult):設定查詢傳回的記錄數;
C、 Criteria add(Criterion criterion):增加查詢條件
D、 Criteria addOrder(Order order):增加排序規則,例如addOrder(Order.desc("type"));
E、 static eq | ne | gt | ge | lt | le(String propertyName,Object value),判斷指定屬性值是否等于,不等于,大于,大于等于,小于,小于等于指定值
F、 static Criterion between(String propertyName,Object lo,Object hi)判斷屬性值在某個值範圍之内
G、 static Criterion like(String propertyName,Object value),判斷屬性值比對某個字元串,不區分大小寫,條件字元串要不是完整的字元串去比對,要不采用%通配符進行比對
H、 static Criterion ilike(String propertyName,String value,MatchMode matchMode),判斷屬性值比對某個字段,不區分大小寫,模式是以判斷以某個字元串開頭或者結尾等,這個比對字元串可以是整個值的字元串,也可以是其中的一部分,也可以使用%通配符.
MatchMode.START:字元串在最前面的位置.相當于"like 'key%'"
MatchMode.END:字元串在最後面的位置.相當于"like '%key'"
MatchMode.ANYWHERE:字元串在中間比對.相當于"like '%key%'"
MatchMode.EXACT:字元串精确比對.相當于"like 'key'
J、 static Criterion in(String propertyName,Collection values)判斷屬性值在在某個集合内
K、 static Criterion in(String propertyName,Object[] values)判斷屬性值是數組元素的其中之一
L、 static Criterion isNull(String propertyName) 判斷屬性值是否為空
M、 static Criterion sqlRestriction(String sql)直接使用sql語句作為篩選條件,例如:.add(Restrictions.sqlRestriction("type > 15"))
N、 static Criterion not(Criterion expression) 對Criterion求反,兩個條件進行嵌套,例如.add(Restrictions.not(Restrictions.eq("name", "cname")))
2、關聯與動态關聯
1>Criteria createCriteria(String associationPath):使用預設的連接配接方式進行關聯
2>Criteria createCriteria(String associationPath,JoinType joinType):以JoinType指定的連接配接方式進行關聯;支援INNER_JOIN、LEFT_OUTER_JOIN、RIGHT_OUTER_JOIN、FULL_JOIN等枚舉值;
3>Criteria createCriteria(String associationPath,String alias):該方法的功能與第一個方法的功能基本相似,隻是該方法允許為關聯實體指定别名;
4>Criteria createCriteria(String associationPath,String alias,JoinType joinType):該方法的功能與第二個方法的功能基本相似,隻是該方法允許為關聯實體指定别名;
5>Criteria createCriteria(String associationPath,String alias,JoinType joinType,Criterion withClause):該方法的功能最強大,該方法既可為關聯實體指定别名,也可指定連接配接類型,還可以通過withClause指定自定義的連接配接條件---這個可用于實作非等值連接配接;
createAlias()方法并不是建立一個新的Criteria執行個體,他隻是給關聯實體(包括集合裡包含的關聯實體)起一個别名,讓後面的過濾條件可根據該關聯實體進行篩選;
<code>Criteria criteria = session.createCriteria(Student.</code><code>class</code><code>,</code><code>"s"</code><code>);</code>
<code>criteria.add(Restrictions.eq(</code><code>"id"</code><code>,</code><code>1</code><code>));</code>
<code>List list = criteria.createCriteria(</code><code>"room"</code><code>,</code><code>"r"</code><code>,JoinType.INNER_JOIN).list();</code>
<code>for</code> <code>(Object object : list){</code>
<code> </code><code>Student student=(Student)object;</code>
<code> </code><code>System.out.println(student.getName());</code>
<code> </code><code>System.out.println(student.getId());</code>
<code> </code><code>ClassRoom room = student.getRoom();</code>
<code> </code><code>System.out.println(room.getId());</code>
<code> </code><code>System.out.println(room.getName());</code>
<code> </code><code>}</code>
3、投影、聚合和分組
Hibernate的條件過濾中使用Projection代表投影運算,Projection是一個接口,而Projections作為Projection的工廠,負責生成Projection對象;
一旦産生了Projection對象之後,就可以通過Criteria提供的setProjection(Projection projection)方法來進行投影運算。
1>AggregateProjection avg(String propertyname):計算特定屬性的平均值,類似于avg函數;
2>CountProjection count(String propertyname):統計查詢結果在某列上的記錄條數,類似于count(column)函數;
3>CountProjection countDistinct(String propertyname):統計查詢結果在某列上不重複的記錄條數,類似于count(distinct column)函數;
4>PropertyProjection groupProperty(String propertyname):将查詢結果按某列上的值進行分組,類似于添加group by子句;
5>AggregateProjection max(String propertyname):統計查詢結果在某列上的最大值,類似于max函數;
6>AggregateProjection min(String propertyname):統計查詢結果在某列上的最小值,類似于min函數;
7>Projection rowCount():統計查詢結果的記錄條數,類似于count(*)的功能;
8>AggregateProjection sum(String propertyname):統計查詢結果在某列上的總和,類似于sum函數;
<code>//使用createCriteria開始條件查詢 </code>
<code>List list = sess.createCriteria(Enrolment.</code><code>class</code><code>) </code>
<code> </code><code>.createAlias(</code><code>"student"</code><code>, </code><code>"s"</code><code>) </code>
<code> </code><code>.setProjection(Projections.projectionList() </code>
<code> </code><code>//統計記錄條數 </code>
<code> </code><code>.add(Projections.rowCount()) </code>
<code> </code><code>//統計選擇該課程裡最大的學生姓名 </code>
<code> </code><code>.add(Projections.max(</code><code>"s.name"</code><code>)) </code>
<code> </code><code>//按照course進行分組 </code>
<code> </code><code>.add(Projections.groupProperty(</code><code>"course"</code><code>))) </code>
<code> </code><code>.list(); </code>
本文轉自zsdnr 51CTO部落格,原文連結:http://blog.51cto.com/12942149/1932738,如需轉載請自行聯系原作者