- JPQL入門します
A)フォーマット:JPQL文が唯一のJavaクラスを作成し、属性名をすることができ、JPQLステートメントは、オブジェクト指向のステートメントです。
SQLは、データベーステーブルのクエリです
B)JPQL書き込みルール
私はテーブル名、列名、Javaクラス名のみ(完全名の修飾クラス名をか)が発生することがあります内側。表示されていない、属性名は大文字と小文字を区別
II。SQLキーワードが表示されるのと同じ意味では、大文字と小文字を区別しません
III。エイリアスを選択し、書き込み*選択書き込むことはできません
- シンプルなJPQLを使用してJPAクエリデータ
a)は、特定のクエリの属性:文字列JPQL = "従業員Oから、o.department.nameをo.name選択";
B)=「SELECT JPQL文字列を用いて新たなオブジェクトを見つける新しい従業員(o.name、o.department.name)を従業員Oから」。
C)クエリフィルタの結果: "従業員からSELECT O = OまたはWHERE o.department.city o.department.city = ??"ストリング= JPQL;
query.setParameter(1、 "成都").setParameter(2、「広州「);
D)ソートクエリ:文字列JPQLは=「Oから選択 o.salary DESC順oを従業員」、
関連付けられたオブジェクトの文字列JPQL =「社員Oから選択ソーティング o.department.id DESC順O」。
E)に使用して: "IN(0 ,. 1)o.department.street従業O O SELECTから??"ストリング= JPQL;
。query.setParameter(1、 "エイト・ストリート").setParameter(2、「chunxiロード「);
F)データ間隔クエリ:選択O従業員からOここo.salary間:minとmax。
模糊查询同様G):文字列JPQL = "好きo.nameここでoを従業員からOを選択する等o.name?"。
クエリのクエリ= entityManager.createQuery(JPQL)。
query.setParameter(1、 "%のER%")setParameterを(2、 "%%EN")。
H)個別去の重:文字列JPQL = "従業員Oから別個o.departmentを選択";
ⅰ)新BigDecimalを( "10" )à 印刷10
印刷しà新のBigDecimal(10)ラジオ10に近い値
j)の集計5つの機能:AVG()、COUNT()、SUM()、分()、MAX()
- 集合演算
A)部門の従業員をチェックアウトし、従業員の数は、クエリのセクターに相当し、すなわちサイズ> 0、
SELECT O O部門からWHERE o.employees.size> 0;
B))ソート機能を使用して(部門スタッフの数でソートし、情報部門をチェックアウト
o.employees.size降順で注文部門からSELECT O Oに。
C)プロジェクトがない従業員の関与(サイズのセットを使用するために)チェックアウト
WHERE = 0のp-p.employees.sizeからSELECT p型プロジェクト。
- JSONでJPQL違いは、SQLキーワードをキーワード:ON文SQLを記述し、JPQL文の書き込みはありません
前にJPQL文の別名オブジェクトで、名前の前のテーブル上のSQL文の別名である
すべての従業員と部門の情報のためのa)のクエリ:ストリングJPQL = "O d.nameを選択し 、左D o.department参加oを従業員から"。 - ページングクエリ
A)// =現在のページ2をcurrentPageにint型を;
。; //は=のpageSizeの数を示し、5 INT
//がそこからデータを取得し、インデックスは0から始まる
- 1)int型firstResult =(currentPageに ; * pageSizeを
取る方法//記事データ
INT = maxResultのpageSize
query.setFirstResult(firstResult).setMaxResults(maxResults)。
- ネイティブSQLクエリのデータを使用してJPA
a)は、オブジェクトの配列を返し
= entityManager.createNativeQuery(SQL)クエリをクエリします。
リスト<オブジェクト[]>リスト= query.getResultList()。
b)のモデルオブジェクトを返します
。文字列のSQL =「従業員からのSELECT *は」
//従業員テーブルのEmployeeオブジェクトを変換するために休止状態伝えます
クエリのクエリ= entityManager.createNativeQuery(SQL、Employee.class)。
一覧<従業員>リスト= query.getResultList();
検索条件の追加
)文字列のSQL =「?を選択し、Cを従業員から場所名給与DESCによって順序のような*」;
クエリのクエリ= entityManager.createNativeQuery(SQL、Employee.class)。
query.setParameter(1、 "%%EN")。
一覧<従業員>リスト= query.getResultList();
- &トランザクションの同時実行楽観的ロック、
4つの特性A)トランザクション
私は原子性:その操作のためのデータ、完了のいずれかまたはすべてが失敗します
II一貫性:トランザクションがデータベース上の制約で完全な変更ではありません
III単離:同時トランザクションは、各トランザクションは、互いに独立して、関係ありません
IV永続:トランザクションが完了したら、それはデータシステムが永続的に影響します。
b)の並行トランザクション:データベースは、複数の同時トランザクションが、パフォーマンスを向上させることができます
C)トランザクション分離メカニズム:同じデータにアクセスしたり、修正することから、同時トランザクションは、通常、並行性の問題を解決するための分離機構を使用する必要があり、
実装D)分離機構
私は一部のトランザクションの同時実行の問題
- 最初に失われたアップデート(とスパイク活動)
- 複数のトランザクションが同時に同じデータを読み取り、そのトランザクションを完了するために、最後の表紙にデータ・トランザクションに対するすべての変更をコミットしたトランザクションをコミット:第二のカテゴリーは、更新を失いました
- ダーティー読み取り
- マジック読書
- 非反復リード
ダーティ・リード、ファントム読み取り、非反復可能読み取り分離機構は、に対処するためのデータベース管理にハンドオーバすることができます - トランザクション分離レベル
A)Serilazable:ダーティ・リード、ファントム読み取り、反復不能読み取りは表示されません
B)readUnconmmited:ダーティ・リード、ファントム読み取り、非反復可能読み取りが表示されます
readConmmited C):ダーティリード防ぐ、ファントムは回避し、反復可能読み取りすることはできません読み取り
D)preperTable:ダーティリード防ぐ、反復可能読み取り、ファントムは避けられない読み
E)悲観的ロック:トランザクションが解除されていない場合、テーブルデータの同じ列の同じ行で処理し、他のトランザクションは常にentityManager.find(クラス、ID、LockModeType)を使用して、待機状態になり 、 送信に対応する、プラス悲観的ロックをUPDATE(プラス行ロック)SELECT ... FOR
entityManager.lock(オブジェクト、LockModeType)を使用し、FROM ... UPDATE(プラスラインロック)するための送信SELECT IDに対応する、プラス悲観的ロックを
非効率:待たなければなりませんトランザクションが終了すると、あなたが他のトランザクションを実行することができます
F)楽観的ロック:同じ列データの同じ行の同じテーブルが条件クエリとして異なるバージョン番号のデータであるハンドル
私はシナリオを使用:スパイク活動(開発時に注釈@Versionを使用して、使用することは推奨されません)
IIシーン:並行性の高い電力供給、メッセージキューを使用して、
- JPAの最適化
a)は双方向対多の関連
B)二次キャッシュ・コンフィギュレーション・オブジェクト、セット二次キャッシュを使用せずに、二次キャッシュのセット、二次キャッシュでなければならないオブジェクトのコレクション場合、クエリキャッシュ(クエリJPQL)だけでなく、クエリキャッシュクエリを使用
C)セット多くのコレクションを使用して、リストを(シーケンスが繰り返される)を設定関係を組み合わせます
- 3つのデータベース・パラダイム
a)第一のパラダイム:データテーブルの各列はもはや作成されていないが、いずれか一つの値だけを格納することができ、分離すること
b)第二のパラダイム:内部では、各テーブルには、すなわち、主キーデータの各ラインを区別するための一意の識別子を有します
第三のパラダイム:一般的に、別のテーブルに格納されていない非重要情報であるテーブルは、主キーは、典型的に、すなわち、外部キー、別のテーブルに格納されています