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")));
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(
11) Query Criteria Id: Not Equal
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);
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);