1、簡単な概要
1.1、
1) SQL: tableNameのSELECTから指向データベース*;
2) HQLクエリー(Hibernateのクエリ言語):クエリ言語オブジェクト指向休止提供。
例:session.createQuery(「tableNameのから」) //とSQL文の1)ポイントのアイデンティティ、効果をチェックアウトが同じである
3) 基準クエリ、完全にオブジェクト指向のクエリ(基準、QBCて、クエリ)
4 ) のSQLQuery、ネイティブSQLクエリのロジックを達成するのはHQLは難しく、より複雑です
短所:ないクロスデータベースプラットフォーム、データベースを変更した場合、SQL文は変更する可能性があることができます
使用シナリオを:複雑なSQLの場合は、HQLの状況を達成することができない、あなたは、ローカルのSQLクエリを使用することができます
HQLクエリーは注意する:
1を、HQLクエリーとき =「true」の自動インポートは、それがfalseの場合、trueに設定するには、ときHQLを書き、クラスの完全な名前を指定するたとえば、:
1.1、クエリq = session.createQuery( "から従業員)"; // =自動インポート"をtrueに"とき
1.2、Q = session.createQueryクエリ( "から com.shore.model.Employee "); // =自動インポート"をfalseに"とき
2は、と注釈バージョン、(真のデフォルト)「真の」自動インポート=、可能であり、クラスの完全な名前を書かない書きます。では、XML構成バージョン、あなたが指定する必要があり、「真の」自動インポートを= 、指定されていないこの地域コードが真である場合、上記のようにわずか1ポイント1.2などの点を記述します。
1.2、すべての列を照会
1つのクエリのクエリ(「従業員から」)= session.createQuery。// OK 2クエリのクエリ= session.createQuery( "com.shore.model.Employeeから"); // OK 3クエリのクエリ= session.createQuery( "選択*従業員から"); // 错误、不支持* 4クエリのクエリ= session.createQuery( "従業員の電子から電子を選択して"); // OK 5システム。アウト .println(query.list()); // 把结果打印到控台上
1.3、クエリが列を指定します
1つのクエリのクエリ= session.createQuery(「従業員から選択し、名前、性別、給与」); 2システム。アウト .println(query.list());
1.4、クエリ指定された列、自動包装オブジェクト
1つのクエリのクエリ= session.createQuery( "を選択し、新しい従業員からcom.shore.model.SubEmployee(名前、性別、給与を)" ); 2システム。アウト .println(query.list());
1.5条件お問い合わせ
1.5.1、クエリ条件のプレースホルダ(?)
1つのクエリのクエリ= session.createQuery( "を選択し、新しい従業員からcom.shore.model.SubEmployee(名前、性別、給与)DEPARTMENT_ID =の? " ); 2 // query.setParameter(0、1); // 或者下面的setInteger(0、1)方法也行 3 query.setInteger(0、1 )。 4システム。アウト .println(query.list());
1.5.2、パラメータの名前問い合わせの条件(:)
1クエリのクエリ= session.createQuery( "DEPARTMENT_ID =従業員から新しいcom.shore.model.SubEmployee(名前、性別、給与)を選択: DEPTID" ); 2 query.setParameter( "DEPTID"、1 ); 3システム。アウト .println(query.list());
1.5.3、クエリ条件は(間....そして、...)クエリの範囲
1クエリのクエリ= session.createQuery( "従業員どこDEPARTMENT_IDから新しいcom.shore.model.SubEmployee(名前、性別、給与)を選択の間 :D1 と :D2 " ); 2 query.setParameter( " D1 "、1); // ?也可以用占位符实现 3 query.setParameter( " D2 "、2 )。 4システム。アウト .println(query.list());
1.5.4、あいまい検索クエリの条件 のような
1つのクエリのクエリ= session.createQueryは(「従業員どこ名から新しいcom.shore.model.SubEmployee(名前、性別、給与)を選択するように?」); 2 query.setParameter(0、 "%の三の%" )。 3システム。アウト .println(query.list());
1.6、統計の集計関数
1つのクエリのクエリ= session.createQuery( "SELECT COUNT(*)従業員からどこの名前のような?" ); 2 query.setParameter(0、 "%の三の%" )。 3システム。アウト .println(query.list());
1.7、グループ化クエリ(グループによる)
1つのクエリのクエリ= session.createQuery( "従業員から)*(カウント、部門を選択して、グループ DEPARTMENT_ID" ); //根据部门外键 2システム。アウト .println(query.list());
1.8、クエリ(コネクタ、外部コネクタ、左/右接続)に参加
エン:内部結合に参加== //交差点が
参加左:ない参加する場合は、左は、テーブルのプライマリテーブルの左側に、参加し、テーブルの右へ左表のデータの整合性の側、およびデータが空でもよいです。交差点の右側にテーブル+テーブルの左側のすべてのデータ//
右の接続:右に参加、テーブルにメインテーブルの権利、参加できない場合は、右の表のデータの整合性、テーブルの左のデータが空になることがあります。テーブルの左側部分の右側にあるすべてのデータテーブルの+ //交差点
外部接続:外部結合 //セットと
1つの コネクタ1)マッピング関係は、オブジェクトのプロパティを直接書き込むことができ、関連する時間が設定されている] 2クエリsession.createQuery Q =(「従業員からE インナー参加 e.departmentを」); //従業員の部門であります外部キー(DEPARTMENT_ID Employeeテーブル)マッピング・エンティティ 3。 4。 2)左側に接続 5。クエリsession.createQuery Qは=( "従業員からEは、参加左 e.departmentを" ); 6 。7 3)右外部結合。 8。クエリsession.createQuery = Q(「部署Dから右参加 d.employee」); 外部キー(EMPLOYEE_ID)//マッピングする 。9 10 押圧FETCH使用に接続された4)が、データは右テーブル、テーブルが左に充填されているであろうオブジェクト!] 11クエリQ = session.createQuery(「従業員から電子インナージョインフェッチ e.department」)。 12 q.list()。 13 14 迫切左外连接5) 15クエリQ = session.createQuery( "従業員からの電子左ジョインフェッチ)e.department"。
1.9、HQLクエリの最適化
1クエリのクエリ= session.getNamedQuery( "getAllDept"); // パラメータ名getAllDept定義 2 query.setParameter(0、10);
その後に対応するXML設定ファイル SQL文を記述します。(髪複雑なSQL文の場合は、あなたが変更することができ、リリース後にプロジェクトを促進するために、そうすることができます)
1 例、中:Employee.hbm.xmlのSQL文のxmlに保存されている 2 < クエリ名= "getAllDept" > //ここパラメータ名getAllDept上記対応するように 3。 <[CDATA [! 4。 従業員DからDEPARTMENT_ID <? ; //ここでのSQL文を書くためではなく、文はHQL 5 ]]> 6 </ クエリ>
2、HQLクエリ言語の例
原作:DSHORE ホーム著者: http://www.cnblogs.com/dshore123/ 元から:https://www.cnblogs.com/dshore123/p/11546575.html 転載、複製ようこそ、ソースを示すようにしてください。(この記事は参考になりました場合は、右下隅をクリックすることができ勧告を、またはコメント、ありがとうございます!) |