HibernateのQueryインタフェースとクエリー操作


Hibernate基本クエリー
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 list=query.list();
                for(Object[] objects:list){
                   for(Object object:objects)
                       System.out.println(object);
                }
                transaction.commit();
            }catch (Exception e){
    
                if(transaction!=null){
                    transaction.rollback();
                }
    
                e.printStackTrace();
            }finally {
    
                session.close();
            }
        }

    ≪問合せインスタンス|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 list=query.list();
                for(Object[] objects:list)
                for(Object object:objects)
                    System.out.println(object);
                transaction.commit();
            }catch (Exception e){
    
                if(transaction!=null){
                    transaction.rollback();
                }
    
                e.printStackTrace();
            }finally {
                session.close();
            }
        }

    havingキーワードはgroupbyと組み合わせて使用し、パケットクエリー後のデータをフィルタリングする
    ページング・クエリー:Queryインタフェースには、クエリーの結果をページングするための次の2つの方法があります.
    setFirstResult(int firstResult);
    setMaxResult(int maxResult);