1.1 永続クラスの書き込みルール 永続クラスで何1.1.1? 永続クラス:表確立エンティティクラスのマッピングは、永続クラスを呼び出すことができます。 永続クラス = Javaクラス+ マッピングファイル。 1.1 0.2 永続クラスの書き込みルールは、 ( 1 ):引数のコンストラクタを提供していない ( 2 ):クラスのメンバであるプライベートプライベート ( 3):のGET /プライベート属性を提供setメソッドは、 ( 4 ):プロパティを使用するように包装タイプ:デフォルトとは異なる、デフォルト値包装ヌル、デフォルトのデータ型ベース0.5 ( 5 ):最終的な変更のための永続クラスを使用しない:最終的な変形を使用し、遅延ローディングの失敗を、即座にロードされたとなる。 ( 6 ) :識別子(OID)を提供するために必要なクラス属性、テーブルの主キーとの間のマッピング関係:Hibernateは、オブジェクトが同一のID属性に従っているか否かを判定する。 永続クラスは、特別のJavaBeanである 識別子エンティティクラスを休止属性:オブジェクト同定さはOID属性が呼ば 主キーのエンティティクラスの属性に対応する設定ファイルである。 効果:Hibernateは、オブジェクトが同じであるかどうかを区別するためにしてみましょう。 複数のオブジェクト場合アイデンティティは、あなたが同じオブジェクトは、格納されたデータが文句を言うだろうと思います冬眠、同じ属性値。 OIDの特性が維持するために休止状態に引き渡されています。 メリット:OIDプロパティで同じことを繰り返さないように ユニークな非空を確保するためのコードを記述する必要はありません。 1.2 主キーの生成方法を休止: 1.2.1は自然主キーと代理の主キーを区別 自然主キー:テーブルの主キーとして企業の自己プロパティを使用するときにテーブルを作成する 例:人のテーブルを作成するには、ID番号の自生を使用することができます主キーとして(のみまたとない)。 サロゲート主キー:テーブルを作成する際に、主キーとして関連しないフィールドを作成し、主キーとして、自身の属性でエンティティによって使用されない 自己を使用することなく、人のテーブルを作成します。例えばIDを作成するために、別の一次キーとしてID番号(一意またとないです)主キー。 代理の主キーを使用してみてください。あなたは主キーがビジネスロジックに参加するために必要な自然の主キーを使用する場合は、設計やコードの多くを変更することが必要になることがあります。 1.2.2 の主キー生成方法 の主キーは、ユーザー自身によって維持されるべきではない、統一しなければならない管理は、Hibernateその方法の主キー統合管理提供:主キー生成戦略を INCREMENT:自動成長は、Hibernateは、自動成長を提供することである(ショート,.のためのデータベースに自動的に増加しないINT 、主キーのロングタイプ) を選択し使用する最初のcust_customerから最大(CUST_ID);この最大値 + 1 次のレコードの主キーとして データベースへの同時アクセスのためには適用されない。 アイデンティティ:ショートの自動成長、int型、データベースに自動的に成長メカニズムのために使用されるマスターキーのロングタイプいないすべてのデータベースは、Oracleが自動的に増加しないよう、自動拡張をサポートしています。 シーケンス:ショート、シーケンスint型。シーケンスを使用して達成され、主キーのロングタイプは、データベース.Oracleサポート・シーケンス・モードにする必要があり、主キーを自動的に生成しました成長。 ネイティブ :基礎となるデータベースに基づいて、ローカルポリシーは、異なっています 自動的に同一性またはシーケンスを使用して選択。 UUID:主キーの文字列型のためのランダムな文字列。 割り当て:Hibernateは主キーを保持していない、開発者が手動で主キーを設定する必要があり 概要:それは数値型のものである場合の後、ネイティブの選択、varchar型ならば、選択することができますUUID が、メンテナンスを休止状態にすることはできません、手動で独自のnull以外のプログラムで(割り当て)設定 1.3 永続クラス3つの状態 1.3.1 三つの状態でのHibernate永続クラスを。 より良い管理のための永続化フレームワークを休止クラス、3つの状態に永続クラス。 瞬時の状態:いいえ永続的なアイデンティティOID、操作はセッション管理ではありません 一貫性のある状態で:OIDは、永続的なアイデンティティを持っている、セッション操作は、管理されています。 (オフ状態)デタッチ状態:永続的なアイデンティティのOIDがあり、操作が管理されていないセッション。 1.3.2は三つの状態永続クラス区別 公共 のボイドDEMO1を(){ セッションsession = HibernateUtils.openSession(); トランザクションのトランザクション = session.beginTransaction(); // 過渡状態:なし永続的なアイデンティティのOID、セッション管理ではありません お客様=お客様の新しい新しい顧客(); customer.setCust_name(「HUANG天華」); // 一貫性のある状態にある:YES持続性アイデンティティのOID、セッション管理がされている シリアライズID = Session.save(顧客); System.out.printlnは(ID); transaction.commit(); Session.close(); // デタッチ状態:YES永続的なアイデンティティのOID、未セッション管理 のSystem.out.println(customer.getCust_name()); } 1.3.3 変換三つの状態(面接の質問) 過渡状態:なし永続的識別OIDはなく、セッション管理が 得られました: お客様の顧客 = 新しい新しい顧客(); 状態遷移: 瞬時 - > 永続性:、保存するsaveOrUpdate 瞬間 - >ホスティング:customer.setCust_id(1L ); 永続状態:YES永続的なアイデンティティのOID、セッション管理がされてい て得られた:限りクエリ方法は永続状態オブジェクトであるに直接関係する。 カスタマーカスタマー = Session.get(カスタマ。クラス、1L )、 状態遷移 持続 - > ホスティング:閉じ 永続 - > 瞬時:削除 デタッチ状態:YES永続的なアイデンティティのOIDを、セッション管理ではありません 得る カスタマー・カスタマを =新しい新;顧客() customer.setCust_id( 1L ); 状態遷移を: 管理 - > 永続性:保存、更新、するsaveOrUpdateが ホストされている - >瞬時:customer.setCust_id(ヌル) 一貫性のある状態にある:限り、クエリのリターンを永続オブジェクトは、状態クラスに一貫性のある状態にある。 機能:永続的状態オブジェクトを更新操作を実行するために必要な特性の変更が終了している場合、データベースは自動的にデータを更新する 1.3.4 データベースの永続的な状態を自動的に更新することができる 公共 ボイドDEMO2(){ セッションセッション = HibernateUtils.openSession(); トランザクショントランザクション =session.beginTransaction(); //永続状態のオブジェクトを取得 カスタマー顧客= Session.get(カスタマ。クラス、1L ); customer.setCust_name( "ワン・バオチャン" ); // Session.update(顧客); // 手動による更新メソッドが呼び出されていないが、またデータベースを更新することができる transaction.commitを(); Session.close(); } 1.4 休止状態のキャッシュ 1.4.1 概要キャッシュ 1.4.2 休止状態の概要: Hibernateのフレーム自体を、性能は非常に良好ではないが、Hibernateは提供します多くのパフォーマンスの最適化は手動で、例えば、キャッシュ Hibernateのフレームワークは、キャッシュ、2つのレベルを提供します。 キャッシュ:セッション・レベルのキャッシュはキャッシュと呼ばれているので、内蔵のセッション(Javaコレクションの一連のセッションからなる)アンインストールすることはできません...に沿って、ライフサイクル の二次キャッシュ:SessionFactoryのと呼ばれます。デフォルトでは、キャッシュ構成に必要なプラグインのレベルのキャッシュがオープン.ehcheをしません。 == Redisの PS :.検索データベースキック取引を削除、追加および変更に加えて、脇にキャッシュを設定することになります 限り、セッションが閉じられているとしてではなく、すべてのキャッシュデータをクリアしました。 理由:のキャッシュがあり 、原則としては: (お客様のSession.get クラス、1L) // 上の調査の後にキャッシュ上のデータベースクエリには、 キャッシュ ストアが 置か スナップショットゾーンの バックアップコピー ct.setCust_name(「rose1234」); // バッファメモリ領域には、コンテンツを変更しますが、スナップショット地区修正しない レベルのキャッシュ メモリ領域を 変更する スナップショット領域を 前に tx.commit(); // に行きますキャッシュ、データ格納領域とスナップショット領域には、比較することが出ている 何もしない:同じの 矛盾:データ更新するステートメントを更新し、自動的に送信されたデータか 1.4.3 :キャッシュの存在を証明する 公共 空DEMO1(){ セッションのセッションを =HibernateUtils.ipenSession(); Thransactionトランザクション= session.beginTransaction()。 お客様の顧客 = 新しい顧客(); customer.setCust_name( "好の强" ); シリアライズID = session.save(顧客)。 session.get(Customer.classmid)。// 没有发烧SQL语句。 顧客customer1 = session.get(顧客クラス、1L)。// 发送SQL语句去查询 のSystem.out.println(customer1)。 カスタマーcustomer2 = session.get(お客様。クラス、1L)。//SQL文は送信されない のSystem.out.println(Customer2); transaction.commitを(); Session.close(); } バッファ・キャッシュ、およびスナップショット領域を有する、後でデータがリセットされ、更新のキャッシュをするため、バッファゾーン、バッファゾーンのスナップショット内の同じ対比し、提出することを約束 されていない場合、面積はスナップショットに復元されず、データベースの更新、一貫性のある場合には、何のデータベースの更新が 1.4.5にキャッシュ管理を:キャッシュデータを空にする 。、近いキャッシュ管理クリア、関連する方法は、立ち退か クリアデータキャッシュのすべてをクリアすることができる。 追い出しが特定のキャッシュのオブジェクトのデータを消去することができる。 1.5 セッションバインディング(ThreadLocalのは) 1.5.1 セッション使用で提供糸で縛り休止状態 <! -結合現在のスレッドで設定セッションを- > <プロパティ名=「hibernate.current_session_context_classがある」>スレッド</プロパティ> 1.6 の他のAPIにHibernateを 休止状態で、クエリ・バッチデータの方法: クエリ:これを行う方法もHQLクエリとして知られている照会を使用する場合。 基準:ある場合クエリを行うこのように、クエリはQBCと呼ばれている。 1.6.1 クエリ:HQLクエリは HQLクエリーを受信:HQL - 。クエリ言語は、クエリ言語を休止状態休止状態、SQL言語の構文は、一つのオブジェクト指向言語.Queryと非常によく似ていますインタフェースは、HQLクエリは..クエリオブジェクト指向のオブジェクトである @Test / ** *問合せインタフェース * HQLクエリは、クエリオブジェクト指向のオブジェクトである。 * / 公共 ボイドDEMO1(){ セッションセッション = HibernateUtils.getCurrentSession()。 トランザクショントランザクション = session.beginTransaction(); // 查询全部客户信息: / * クエリのクエリ= session.createQuery( "お客様から"); 一覧<顧客>リスト= query.list(); {:(リストお客様の顧客)のため のSystem.out.println(顧客)。 } * / // 条件查询 / * クエリのクエリ= session.createQuery( "お客様から好きCUST_NAME?"); //设置参数 query.setParameter(0、 "郝%")。 一覧<顧客>リスト= query.list(); {:(リストお客様の顧客)のために System.out.println(顧客)。 } * / // 分页查询: クエリのクエリ= session.createQuery( "お客様から" ); // 開始する query.setFirstResultを(3 ); // レコードのページ番号 query.setMaxResults(3 ); リスト <顧客>一覧= ; Query.list() のために{(リスト顧客顧客) のSystem.out.println(顧客); } transaction.commit(); } 1.6.2 基準:QBCお問い合わせ QBC - 基準クエリ条件によってクエリよりオブジェクト指向のクエリ言語.. @Test / ** * QBCクエリ:条件によってクエリ * / 公共 ボイドDEMO2(){ セッションsession = HibernateUtils.getCurrentSession(); トランザクショントランザクション = session.beginTransaction(); // 查询全部: / * 基準基準= session.createCriteria(Customer.class)。 一覧<顧客>リスト= criteria.list(); {:(リストお客様の顧客)のため のSystem.out.println(顧客)。 } * / // 条件查询 / ** * == EQ *> GT *> = GE * <LT * <=ル * <> NE *中に *などのような * * / / * 基準基準= session.createCriteria(Customer.class)。 // criteria.add(Restrictions.eq( "CUST_NAME"、 "郝天一")); criteria.add(Restrictions.like( "CUST_NAME"、 "郝%")); 一覧<顧客>リスト= criteria.list(); {:(リストお客様の顧客)のため のSystem.out.println(顧客)。 } * / // 分页查询 基準基準= session.createCriteria(お客様。); criteria.setFirstResult( 3 )。 criteria.setMaxResults( 3 )。 一覧 <顧客>リスト= criteria.list(); 用(顧客顧客:リスト){ System.out.printlnは(顧客)。 } transaction.commit()。 }