HibenateMinute(二)


Criteria:
Criteria criteria = session.createCriteria(User.class);
1)criteria.add(Restrictions.gt("age", new Integer(20)));
2)criteria.add(Restrictions.lt("age", new Integer(40)));
3)criteria.add(Restrictions.or(Restrictions.eq("age", new Integer(20)), Restrictions.isNull("age"))); crit.add(Restrictions.ilike( "name" , "1" , MatchMode.END)); ////ilikeのiはignoreの意味なので、ここでenglishName「Optima?XL?100 K?Ultracentrifuge」(大文字小文字を無視)のレコードを検索します
4)criteria.add(Restrictions.sqlRestriction("{alias}.name LIKE (?)", "cater%", Hibernate.STRING));
5) Integer[] ages = {new Integer(20), new Integer(40)};
Type[] types = {Hibernate.INTEGER, Hibernate.INTEGER};
criteria.add(Restrictions.sqlRestriction("{alias}.age BETWEEN (?) AND (?)", ages, types));
 
6) criteria.setFirstResult(51);
criteria.setMaxResult(50);
7)統計表rowCount()、count()、max()、min()、countDistinct()
criteria.setProjection(Projections.avg("age"));
8)グループ20,20,25,30à20.25.30
       criteria.setProjection(Projections.groupProperty("age"));
9)結合統計グループ
   ProjectionList projectionList = Projections.projectionList();
projectionList.add(Projections.groupProperty("age"));
projectionList.add(Projections.rowCount());
Criteria criteria = session.createCriteria(User.class);
criteria.setProjection(projectionList);
10) Query Criteria Id: data type Long
projectionList.add( crit.add( Expression.idEq(  11111L ) );
11) Query Criteria Id: Not Equal   crit.add( Expression.ne(  "name" "noName"  ) ); ) 12) crit.setProjection(Projections.rowCount()); 13 criteria.setResultTransformer(criteria.DISTINCT_ROOT_ENTITY);
List users = criteria.list();
Restrictionsのいくつかの一般的な限定クエリー方法を以下の表に示します.
方法
説明
Restrictions.eq
に等しい
Restrictions.allEq
Mapを使用し、key/valueを使用して複数の等対を行う
Restrictions.gt
より大きい
Restrictions.ge
より大きい>=
Restrictions.lt
より小さい
Restrictions.le
より小さい
Restrictions.between
SQL対応BETWEEN句
Restrictions.like
SQL対応LIKE句
Restrictions.in
SQL対応in句
Restrictions.and
and関係
Restrictions.or
or関係
Restrictions.sqlRestriction
SQL限定クエリー
HQL(Hibernate Query Language)
 PS:
1:HOLは大文字と小文字を区別しないが、名前は大文字と小文字を区別する.
2:Userカテゴリが適切な構築方法を提供している場合、HQLを使用するときに新しいアイテムの転送を直接指定できます.
Query query = session.createQuery("select new User(user.name, user.age) from User as user");
    3. SessionのsaveOrupdate()メソッドを使用しようとすると、既存の資料を更新するのではなく、新しい資料が追加されます.
    4. having句を組み合わせて、例えば平均20より大きいデータパケットのみを表示することもできます.
Query query = session.createQuery("select user.sex, avg(user.age) from User user group by user.sex having avg(user.age) > 20");
   5. 更新と削除の際
             Session session = sessionFactory.openSession();
Transaction tx= session.beginTransaction();
Query query = session.createQuery("update User set name='momor' where name='bbb'");
query.executeUpdate();
tx.commit();
session.close();
 
Hibernate:HQL/QBCクエリ言語比較の使い方
Hibの検索方式1'ナビゲーション対象図検索方式.ロード済みのオブジェクトを介して呼び出す.iterator()メソッドでは、orderオブジェクトが初めて実行された場合、Hibは関連するorderオブジェクトをデータベースからロードし、そうでなければキャッシュから取得します.2'OID検索方式.セッションのget,loadメソッドでOIDがわかった場合は3'HQL検索方式を利用することができます.オブジェクト向けHQLクエリ文sessionのfindメソッドを用いてHQLを用いて4'QBC検索方式をクエリする.QBCAPIによる検索は,文字列ベースのクエリ文5'をカプセル化したローカルSQL検索方式である.ローカルデータベースのSQLクエリ文Hibを使用すると、取得したJDBC結果セットを永続化オブジェクトマップにマッピングできます.5つの検索方法の使用場面と特徴:HQL:オブジェクト向けの検索言語であり、SQLと似ているものがHibで最もよく使われる方法である.クエリー各種クエリー条件を設定します.投影クエリーをサポートし、オブジェクトのプロパティの一部を取得します.ページングクエリーをサポートし、havingとgroupbyを使用して組み込みの集計関数を提供することを許可し、sum()、min()、max()はユーザーのカスタムSQLサポートサブクエリーを呼び出すことができ、組み込みクエリーは動的バインドパラメータをサポートし、Queryインタフェースを使用してsessionのfindメソッドを置き換えることを提案する.   Query Q = session.createQuery("from customer as c where c.name = :customerName" + "and c.age = :customerAge");   query.setString ("customerName" , "tom");   query.setInteger("customerAge" , "21");   list result = query.list();QBC:QBCAPIは、主にCriteriaインタフェース、Criterionインタフェース、およびExpressionクラスCriteria criteria=sessionを提供する別の方法を提供する.createCriteria(customer.class);   Criterion criterion1 = Expression.like("name","t%");   Criterion criterion2 = Expression.eq("age",new Integer(21));   Critera = criteria.add(criterion1) ;   Critera = criteria.add(criterion2) ;   list result = criteria.list();または:list result=session.createCriteria(Customer.class).add(Expression.eq("this.name","tom")).list();SQL:HQLとQBCで検索する場合、Hib生成SQL文はすべてのデータベースに適用されます.   Query query  = session.createSQLQuery("select {c.*} from customers c where c.name like : customername " + "and c.age = :customerage","c",customer.calss);   query.setString("customername","tom");   query.setInteger("customerage","21");   list result = query.list();/////////////マルチステートクエリHQL:session.createQuery("from employee");   QBC :session.createCriteria(employee.class);   HQL : session.createQuery("from hourlyEmployee");   QBC : session.createCriteria(hourlyEmployee.class);次のHQLクエリ文は、すべての永続化オブジェクトを取得します:from java.lang.Object ;   from java.io.serializable ;////////////クエリーのソート1'クエリーの結果は、顧客名の昇順にソートされます:HQL:Query=session.createQuery ("from customer c order by c.name");   QBC :        Criteria criteria = session.createCriteria(customer.class);        criteria.addOrder(order.asc("name"));   HQL :        Query query = session.createQuery ("from customer c order by c.name asc , c.age desc");   QBC :        Criteria criteria = session.createCriteria(customer.class);        criteria.addOrder(order.asc ("name"));        criteria.addOrder(order.desc("age"));         import net.sf.hibernate.pression.Order        import mypack.Order        ...........        Criteria criteria = session.createCritria (mypack.Order.class);        criteria.addOrder(net.sf.hibernate.Order.asc("name"));///////////HQL文のパラメータバインドQueryインタフェースは、様々なHibマッピングタイプをバインドする方法を提供する.        setBinary()        setString()        setBoolean()        setByte()        setCalendar()        setCharacter()        setDate()        setDouble()        setText()        setTime()        setTimestamp()        setEntity()//パラメータを永続化クラスの事例にバインドlsit result=session.createQuery("from order o where o.customer =            :customer").setEntity("customer" , customer).list ;setParameter()/任意のタイプのパラメータをバインドsetProperties()/名前付きパラメータをオブジェクトの属性値にバインドQuery query=session.createQuery("from customer c where c.name =:     name " + "and c.age =:age" );        Query.setProperties(customer);