QBCクエリー

6023 ワード

1、基本文法
 
1
2
3
4
5 session.beginTransaction(); Criteria criteria = session.createCriteria(Person. class ); SimpleExpression gt = Restrictions.eq( "name" , " " ); criteria.add(gt); List list = criteria.list();
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)は、属性値が配列要素の1つであると判断する
    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に対して逆を求め、2つの条件を入れ子、例えば.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):このメソッドの機能は2番目のメソッドの機能と基本的に似ていますが、このメソッドでは関連エンティティに別名を指定できます.
    5>Criteria createCriteria(String associationPath,String alias,JoinType joinType,Criterion withClause):この方法の機能は最も強く、この方法は関連エンティティに別名を指定したり、接続タイプを指定したり、withClauseでカスタムの接続条件を指定したりすることができます.これは非等値接続を実現するために使用できます.
    createAlias()メソッドは、新しいCriteriaインスタンスを作成するのではなく、コレクションに含まれる関連エンティティを含む関連エンティティに別名を付けるだけで、後続のフィルタ条件を関連エンティティに基づいてフィルタできます.
     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11 Criteria criteria = session.createCriteria(Student. class , "s" ); criteria.add(Restrictions.eq( "id" , 1 )); List list = criteria.createCriteria( "room" , "r" ,JoinType.INNER_JOIN).list(); for   (Object object : list){            Student student=(Student)object;             System.out.println(student.getName());             System.out.println(student.getId());             Cla***oom room = student.getRoom();             System.out.println(room.getId());             System.out.println(room.getName());     }
      
    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):groupby句の追加と同様に、クエリー結果を列の値でグループ化します.
    5>AggregateProjection max(String propertyname):クエリ結果の列の最大値を統計し、max関数に類似する.
    6>AggregateProjection min(String propertyname):あるカラムのクエリ結果の最小値を統計し、min関数に類似する.
    7>Projection rowCount():count(*)の機能に類似したクエリー結果のレコード数を統計する.
    8>AggregateProjection sum(String propertyname):sum関数に類似したクエリ結果の列の合計を統計します.
     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11 // createCriteria   List list = sess.createCriteria(Enrolment. class                        .createAlias( "student" "s"                        .setProjection(Projections.projectionList()                            //                           .add(Projections.rowCount())                             //                            .add(Projections.max( "s.name" ))                            // course                            .add(Projections.groupProperty( "course" )))                            .list();