天天看點

QBC查詢

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&lt;Person&gt; 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 &gt; 15"))

N、 static Criterion not(Criterion expression)  對Criterion求反,兩個條件進行嵌套,例如.add(Restrictions.not(Restrictions.eq("name", "cname")))

2、關聯與動态關聯

1&gt;Criteria createCriteria(String associationPath):使用預設的連接配接方式進行關聯

2&gt;Criteria createCriteria(String associationPath,JoinType joinType):以JoinType指定的連接配接方式進行關聯;支援INNER_JOIN、LEFT_OUTER_JOIN、RIGHT_OUTER_JOIN、FULL_JOIN等枚舉值;

3&gt;Criteria createCriteria(String associationPath,String alias):該方法的功能與第一個方法的功能基本相似,隻是該方法允許為關聯實體指定别名;

4&gt;Criteria createCriteria(String associationPath,String alias,JoinType joinType):該方法的功能與第二個方法的功能基本相似,隻是該方法允許為關聯實體指定别名;

5&gt;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&gt;AggregateProjection avg(String propertyname):計算特定屬性的平均值,類似于avg函數;

2&gt;CountProjection count(String propertyname):統計查詢結果在某列上的記錄條數,類似于count(column)函數;

3&gt;CountProjection countDistinct(String propertyname):統計查詢結果在某列上不重複的記錄條數,類似于count(distinct column)函數;

4&gt;PropertyProjection groupProperty(String propertyname):将查詢結果按某列上的值進行分組,類似于添加group by子句;

5&gt;AggregateProjection max(String propertyname):統計查詢結果在某列上的最大值,類似于max函數;

6&gt;AggregateProjection min(String propertyname):統計查詢結果在某列上的最小值,類似于min函數;

7&gt;Projection rowCount():統計查詢結果的記錄條數,類似于count(*)的功能;

8&gt;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,如需轉載請自行聯系原作者