HibernateのQueryインタフェースとクエリー操作
Hibernate基本クエリー
Queeyインタフェース:Hibernate HQL文を実行するためのクエリーインタフェース
使用方法:
HQL(Hibernate Query Language)
機能:条件照会 は、投影下旬の をサポートします.ページングクエリ 接続クエリー パケットクエリ サブクエリ 内蔵集約関数 動的バインドパラメータ をサポート
エンティティ・クラスのすべてのインスタンス・オブジェクトを問合せ
投影クエリー:クラスのいくつかのプロパティをクエリーし、select文でクラスの一部のプロパティのみを選択することで実現します.
≪問合せインスタンス|Query Instance|oraolap≫:適切な構築方法を追加します.
Studentクラスに構築メソッドを追加するには、次の手順に従います.
where条件文:条件を満たすオブジェクトをクエリーする
.番号
比較演算子:=,,<=,>=,is null,is not null
範囲演算子:in,not in,between and,not between and
パターンマッチング:like'パターン文字列'任意の長さ文字列の代わりに'%'を使用できます.''単一の文字を表す
論理演算子:and,not,or
集合に使用する演算子:is empty,is not empty
HQL共通関数:
文字列相関:upper(s),lower(s),concat(s 1,s 2),substring(s,offset,length),length(s)
trim(s),locate(search,s,offset)
数字:abs(n),sort(n),mod(dividend,divisor)
コレクション:size(c)は、コレクション内の要素の数を返します.
日付:current_date(),current_time(),current_timestamp(),
year(d),moth(d),day(d),hour(d),minute(d),second(d)
distinct:同じデータ項目を削除する
oder by:descは逆配列、ascは昇順配列
パラメータバインディング:where文ではクエリー関数を動的に設定する必要があります.Hibernateは2つのバインディングパラメータの方法を提供します.
パラメータ名でバインド
パラメータ位置によるバインド
集約関数しゅうごうかんすう:クエリ結果をLongとして返すくえりけっかをLongとしてもどす
count(),avg(),sum(),max(),min()
groupby:クエリーのデータを条件にグループ化し、集約関数と組み合わせて使用することが多い
havingキーワードはgroupbyと組み合わせて使用し、パケットクエリー後のデータをフィルタリングする
ページング・クエリー:Queryインタフェースには、クエリーの結果をページングするための次の2つの方法があります.
setFirstResult(int firstResult);
setMaxResult(int maxResult);
Queeyインタフェース:Hibernate HQL文を実行するためのクエリーインタフェース
使用方法:
Query query=session.createQuery("HQL");
query.setParameter("");
List resultList=query.list();
HQL(Hibernate Query Language)
機能:
エンティティ・クラスのすべてのインスタンス・オブジェクトを問合せ
@Test
public void queryAll() {
Session session=HandleSession.getSession();
Transaction transaction=session.beginTransaction();
try{
String hql="from Student ";
Query query=session.createQuery(hql);// or "select stu from Student as stu"
List list=(List) query.list();
for(Student student:list){
System.out.println(student);
}
transaction.commit();
}catch (Exception e){
if(transaction!=null){
transaction.rollback();
}
e.printStackTrace();
}finally {
session.close();
}
}
@Test
public void querySingle(){
Session session=HandleSession.getSession();
Transaction transaction=session.beginTransaction();
try{
String hql="from Student ";
Student student=(Student) session.createQuery(hql).setMaxResults(1).uniqueResult();
System.out.println(student);
transaction.commit();
}catch (Exception e){
if(transaction!=null){
transaction.rollback();
}
e.printStackTrace();
}finally {
session.close();
}
}
投影クエリー:クラスのいくつかのプロパティをクエリーし、select文でクラスの一部のプロパティのみを選択することで実現します.
Query query=session.createQuery("SELECT id,name FROM Student");
List list=query.list()
public void queryShadow(){
Session session=HandleSession.getSession();
Transaction transaction=session.beginTransaction();
try{
String hql="select a.name,a.age from Student a";
Query query=session.createQuery(hql);
List
≪問合せインスタンス|Query Instance|oraolap≫:適切な構築方法を追加します.
Studentクラスに構築メソッドを追加するには、次の手順に従います.
public Student(String name,int age){
this.name=name;
this.age=age;
}
@Test
public void queryShadow2(){
Session session=HandleSession.getSession();
Transaction transaction=session.beginTransaction();
try{
String hql="select new Student (a.name,a.age) from Student a";
Query query=session.createQuery(hql);
List list=query.list();
for(Student student:list)
System.out.println(student);
transaction.commit();
}catch (Exception e){
if(transaction!=null){
transaction.rollback();
}
e.printStackTrace();
}finally {
session.close();
}
}
where条件文:条件を満たすオブジェクトをクエリーする
.番号
比較演算子:=,,<=,>=,is null,is not null
範囲演算子:in,not in,between and,not between and
パターンマッチング:like'パターン文字列'任意の長さ文字列の代わりに'%'を使用できます.''単一の文字を表す
論理演算子:and,not,or
集合に使用する演算子:is empty,is not empty
HQL共通関数:
文字列相関:upper(s),lower(s),concat(s 1,s 2),substring(s,offset,length),length(s)
trim(s),locate(search,s,offset)
数字:abs(n),sort(n),mod(dividend,divisor)
コレクション:size(c)は、コレクション内の要素の数を返します.
日付:current_date(),current_time(),current_timestamp(),
year(d),moth(d),day(d),hour(d),minute(d),second(d)
distinct:同じデータ項目を削除する
oder by:descは逆配列、ascは昇順配列
パラメータバインディング:where文ではクエリー関数を動的に設定する必要があります.Hibernateは2つのバインディングパラメータの方法を提供します.
パラメータ名でバインド
パラメータ位置によるバインド
@Test
public void queryArguments(){
Session session=HandleSession.getSession();
Transaction transaction=session.beginTransaction();
try{
/*
* String hql="select new Student (stu.name,stu.age)from Student as stu where stu.name=? and stu.age=?";
Query query=session.createQuery(hql);
query.setString(0,"wang");
query.setInteger(1,21);
* */
/* */
String hql="select new Student (stu.name,stu.age)from Student as stu where stu.name=:name and stu.age=:age";
Query query=session.createQuery(hql);
query.setString("name","wang");
query.setInteger("age",21);
List list=query.list();
for(Student student:list)
System.out.println(student);
transaction.commit();
}catch (Exception e){
if(transaction!=null){
transaction.rollback();
}
e.printStackTrace();
}finally {
session.close();
}
}
集約関数しゅうごうかんすう:クエリ結果をLongとして返すくえりけっかをLongとしてもどす
count(),avg(),sum(),max(),min()
@Test
public void queryCount(){
Session session=HandleSession.getSession();
Transaction transaction=session.beginTransaction();
try{
/*String hql="select count(stu.id)from Student as stu";*/
String hql="select max(stu.age)from Student as stu";
Query query=session.createQuery(hql);
List list=query.list();
System.out.println(list.get(0));
transaction.commit();
}catch (Exception e){
if(transaction!=null){
transaction.rollback();
}
e.printStackTrace();
}finally {
session.close();
}
}
groupby:クエリーのデータを条件にグループ化し、集約関数と組み合わせて使用することが多い
@Test
public void queryCount(){
Session session=HandleSession.getSession();
Transaction transaction=session.beginTransaction();
try{
//
String hql="select count(stu.id),stu.class from Student as stu group by stu.class";
Query query=session.createQuery(hql);
List
havingキーワードはgroupbyと組み合わせて使用し、パケットクエリー後のデータをフィルタリングする
ページング・クエリー:Queryインタフェースには、クエリーの結果をページングするための次の2つの方法があります.
setFirstResult(int firstResult);
setMaxResult(int maxResult);