【SSH】hibernateのhql学習

2476 ワード

SSHをタップする過程で、Dao層のクエリー方法に対して「hqlクエリー」、「オフラインクエリー」と「ネーミングクエリー」に接触し、データベースの持続化操作に対してより多くのhql方式クエリーを使用し、それをまとめた.
一、Hqlって何?
      HqlフルネームHibernate Query Languageは、クエリ言語であることは明らかです.1つのORMフレームワークはオブジェクト向けに構築されています.HQLの構文はSQLに似ていますが、実際にはクエリのターゲットはオブジェクトです.HQLは、マルチステート、継承、および組合せを含むオブジェクト向け言語のすべての特性を有する.これはオブジェクト向けSQLに相当します.
二、hqlとsqlの比較
     HQLは構造的にSQL文クエリ構文に近い.
     [select/delete/update…][from…][where…][groupby…][having…][order by…]
     sql---データベース・テーブル・クエリー向け
     hql----オブジェクト向けクエリー
     hql:fromの後に続くクラス名+クラスオブジェクトwhereの後にオブジェクトの属性を条件とする
     sql:fromの後ろにテーブル名whereが付いているので、テーブルのフィールドを条件にします.
三、Hqlの使い方
(1)エンティティクエリー
        hqlは現金化クエリーに向いているため、エンティティクエリーは関連するエンティティのすべての属性をクエリーします.
   //  from            , :               
        String hql = "from Users";   
        Query query = session.createQuery(hql);   
            
        List users = query.list();   
        for(Users user : users){   
            System.out.println(user.getName() + " : " + user.getPasswd() + " : " + user.getId());   
        }   
   
    //     :   
    //name1 : password1 : 1 
    //name2 : password2 : 2 
    //name3 : password3 : 3 
     
  hql=「from User」は、マッピング後、Userというエンティティ全体をクエリーすることを示します.
(2)属性照会
    //           
        String hql = " select name,passwd from Users";   
        Query query = session.createQuery(hql);   
        //       list       Object     
        List list = query.list();   
        for(Object[] object : list){   
            String name = (String)object[0];   
            String passwd = (String)object[1];   
                
            System.out.println(name + " : " + passwd);   
        }   
    //     :   
    //name1 : password1   
    //name2 : password2   
    //name3 : password3  
         
 「select」を追加することで name,password from Users"が分かるように,このとき返されるのはUserというエンティティの中の2つのオブジェクト,nameオブジェクトとpasswordオブジェクトである.             
四、まとめ
      上記の例では、hqlに対するクエリのみが最も簡単な2つの側面(エンティティクエリと属性クエリ)から説明されていますが、hqlの使用は深く、hibernateについて深く学習する過程でまとめられます.しかし、HQLにはもう一つ注意しなければならないことがあります.
HQLはアルファベットの大文字と小文字を区別しませんが、HQLのJavaクラスと属性名は実際のクラスと属性名と一致する必要があります.SELECTとselectのように交換できますが、Userとuserは異なる意味を表します.
      例:
 String hql = "from Users";  
 String hql = "FrOm user";

この二つの表現は
異なるエンティティからクエリーを実行します.