Hibernate クエリ関連の知識 時間: 2009-10-04 07:14:25 ソース: インターネット 著者: 不明 クリック数: 146 回 まず get() メソッドとload() メソッドの違いを紹介します。
get() メソッドとload() メソッドの違いは主に、2次キャッシュの使用にあります。
load() メソッドは 2 次キャッシュを使用し、get() メソッドは 1 次キャッシュで見つからない場合はデータベースに直接クエリを実行し、2 次キャッシュでは検索しません。
get(): データベースに get() メソッドとload() メソッドの違いを最初に導入すると、次のようになります。
get() メソッドとload() メソッドの違いは主に、2次キャッシュの使用にあります。
load() メソッドは 2 次キャッシュを使用し、get() メソッドは 1 次キャッシュで見つからない場合はデータベースに直接クエリを実行し、2 次キャッシュでは検索しません。
get(): データベースにレコードがない場合、get() はいずれにしてもデータを返します。
load(): データベースにレコードがない場合は例外がスローされ、データがある場合はプロキシ オブジェクトが返されます。
list メソッドと iterator() メソッドの違い: (N+1?)
list() メソッドが実行されると、クエリ結果に必要なクエリ ステートメントが直接実行されます。
iterator() メソッドは、まずクエリを実行してオブジェクト ID を取得し、次に各 ID 値に基づいてクエリ対象のオブジェクトを取得します。
したがって、 list() メソッドを使用したクエリの場合、通常は 1 つの SQL ステートメントのみが実行されますが、 iterator() メソッドを使用したクエリの場合は、N+1 個の SQL ステートメントを実行する必要がある場合があります (N は結果セット内のレコードの数です) )。
結果セットは異なる方法で処理されます。
list() メソッドは、すべての結果セット オブジェクトを一度にアクティブ化し、クエリ結果に基づいてすべての結果セット オブジェクトを初期化します。結果セットが非常に大きい場合、大量のメモリを占有し、メモリ オーバーフローが発生することもあります。
iterator() メソッドは、実行中にすべてのオブジェクトを一度に初期化するのではなく、結果セットへのアクセスに基づいてオブジェクトを初期化します。 1 回のアクセス中にキャッシュ内のオブジェクトの数を制御して、キャッシュが過剰に占有されてメモリ オーバーフローが発生するのを避けることができます。
HQL: HQL はオブジェクト指向のクエリ言語です。HQL の操作オブジェクトはクラス、インスタンス、属性などです。
SQL: SQL の操作対象は、データ テーブルや列などのデータ オブジェクトです。
Hql は完全なオブジェクト指向のクエリ言語であるため、継承や複数の項目などの機能をサポートできます。
HQL クエリは Query クラスに依存しており、各 Query インスタンスはクエリ オブジェクトに対応します。
パラメータを設定する機能であるクエリ インターフェイスは、実際の HQL クエリ インターフェイスです。
//クエリオブジェクトを作成する
Query query = session.createQuery ("from Customer as c where c.name=:customerName and c.age=:customerAge");
//動的バインディングパラメータ
query.setString("顧客名","トム");
query.setInteger("顧客年齢",21);
//クエリ文を実行して結果を返す
リスト結果 = query.list();
HQL クエリの手順:
1: Hibernate Session オブジェクトを取得します。
2: HQL ステートメントを作成します。
3: HQL ステートメントをパラメータとして使用して、Session の createQuery メソッドを呼び出し、クエリ オブジェクトを作成します。
4: HQL ステートメントにパラメーターが含まれている場合は、Query の setXXX() メソッドを呼び出してパラメーターに値を割り当てます。
5: Query オブジェクトのリストおよびその他のメソッドを呼び出して、クエリ結果をスキャンします。
クエリには次の 2 つのメソッドも含まれています。
setFirstResult(int firstResult): 返された結果セットが開始するレコードを設定します。
setMaxResults(int maxResults): このクエリによって返される結果の数を設定します。
エンティティの削除と更新。
射影クエリ: 属性の一部のみをクエリします。
属性をクエリすると文字列が返されます
2 つのフィールドをクエリすると配列が返されます
動的に構築されたクエリ: 主に数十のテーブル クエリに使用されます。
新しいオブジェクトを構築するには、コンストラクターを追加します。
新しいオブジェクトを作成するときにパッケージ名を追加します
count(*) を使用せず、count(persistent object) を使用してください。
グループ化と並べ替え:
Order by 句は asc または desc キーワードで並べ替えることができます
例: form User u オーダー by u.name asc,u.age desc;
Group by 句と統計クエリ:
例: String hql = "count(u)>10 を持つ u.age によるユーザー u グループから count(u),u.age を選択";
リスト list = session.createQuery(hql).list();
count()、sum()、max()、min()、age() などの標準 SQL 集計関数を HQL ステートメントで使用できます。
接続クエリ:
内部結合: 内部結合
左外部結合: 左外部結合
右外部結合:右外部結合
完全結合: 完全結合 (一般的には使用されません)
緊急外部結合: 左外部結合フェッチ、左結合
fetch: 接続データ、特にコレクションデータを一度に取得するために使用されます。データベースとのやり取りの数を減らします。
left out join: 外部結合を使用して、左側のテーブル内のすべてのレコードと、順序クラスの対応するレコード情報が表示されます。
right out join: left out join の逆で、right out join は HQL の右側のテーブル内のすべてのレコードと、対応する Customer オブジェクト レコード情報を返します。
収集データを取得する 4 つの方法:
1:Hibernate.initialize(user.getOrder());
2:user.getOrder().size();
3: 左右緊急接続
4: 高度なフィルター
基準クエリ: オブジェクトを使用してオブジェクト クエリを実行します。
主なインターフェイスは、Criteria、Criterion、expression_r、および Restrictions クラスです。実行時の SQL ステートメントの動的生成をサポートする機能。
条件付きクエリの手順:
1: seesion の CreateCriteria() メソッドを通じて Criteria オブジェクトを作成します
2: クエリオブジェクトを設定します。名前はオブジェクトの属性を参照します。
3: Criteria オブジェクトにクエリ条件を追加します。
4: list() クエリを実行して結果を返します。
条件付きクエリは、次の 3 つのクラスを通じて完了します。
基準: クエリを表します。
Criterion: クエリ条件を表します。
制限事項: クエリ条件を生成するためのツール クラス。
この記事は CSDN ブログからのものです。転載する場合は出典を明記してください: http://blog.csdn.net/jzaccp_xiaoxiong/archive/2009/12/31/5111135.aspx