SSHフレームワーク学習のHibernate----2、実体クラスオブジェクトに対するCRUD操作


一、実体クラスの作成規則
1、一意の値として属性を要求する(idを使用する)2、エンティティクラス属性、基本データ型を適用せず、パッケージクラスを使用することを推奨する
  • int – Integer
  • char – Character
  • その他の頭文字大
  • 例を挙げると、学生が試験を受けていない点と0点を区別するためです.intはnullを表すことができません.パッケージクラスの使用を推奨
    二、主キー作成規則(自動成長++)
    native:適切なデータベースが自動的に選択されます.uuid:一意の識別子が自動的に生成されます.対応するエンティティクラスは文字列でなければなりません.hibernateが自動的に追加します.
    三、実体クラスのcrud操作
  • 追加操作day 01はあり、
  • は繰り返しません.
  • idに基づいてクエリーを行い、オブジェクト
  • を返す.
                  Class
          id 
    session.get(User.class, 1);
    
  • 修正
  • //sql:
    //1、  id    
    SELECT * FROM t_user WHERE t.uid=1;
    //2、  
    UPDATE t_user SET username='xxx',password='xxx' where id = ?
    //hibernate:
    User user = session.get(User.class,2);
    user.setUserName("laowang");
    session.update(user);
    
  • 削除
  • //sql:
    SELECT FROM t_user WHERE uid = ?
    //hibernate:
    User user = session.get(User.class,2);
    session.delete(user);
    

    四、実体クラスオブジェクトの三つの状態
  • 瞬時状態:オブジェクトにidがなく、セッションに関連付けられていない(newの、idが設定されていない)
  • 永続状態:オブジェクトにidがあり、セッションにも関連(たとえばクエリーされた)
  • があります.
  • 管理状態:オブジェクトにidがあるが、sessionとは関連付けられていない(newの、idが設定されている)
  • savaOrUpdate()
    瞬時状態が入力されると、追加されます.伝達されたのは管理状態であり、更新される.永続的な状態であり、更新でもあります.
    五、hibernateの一級キャッシュ(技術の実現原理を知る)
    5.1キャッシュとは
    データベースにデータを保存すると、データベース自体がファイルシステムなので、ストリームの読み取りを呼び出すのに時間がかかります.私たちはファイルをメモリに入れて、ストリームを使う必要がなく、データを読み書きすることができます.これがキャッシュです.
    5.2 hibernateキャッシュ(hibernateフレームワークの最適化方法の1つ)
    1)レベル1キャッシュ(デフォルトで開く)
    有効範囲は、セッションがセッションクローズに作成されます.
    キャッシュされたデータは、永続状態です.
    2)二次キャッシュ(redisに置き換えられる)
    設定が必要です.有効範囲はsessionFactoyです.
    5.3一級キャッシュの検証方式
    2回クエリーして、初めて1級キャッシュに行って探して、見つからないことを発見して、それではデータベースの中でクエリーを行って、データを1級キャッシュに入れます(sql文を送って、データベースにアクセスします);2回目のクエリは、データベースではなく1レベルのキャッシュで検索されます(sql文は送信されません).
    5.4スナップショット領域技術、持続状態は自動的にデータベースを更新する
    キャッシュ領域で、スナップショット領域として別の領域を開きます.1つのオブジェクトがキャッシュに格納されると、対応するオブジェクトがスナップショット領域に追加されます.
    オブジェクトが変更された場合、キャッシュ内のオブジェクトが変更されます.(user.setName(“newName”);
    トランザクションがコミットされると、スナップショット領域とキャッシュ内の同じオブジェクトの内容が異なる場合にデータベースが更新され、スナップショット領域も更新されます.(session.submit()
    パフォーマンスが最適化され、更新が必要な場合にのみデータベースの更新が行われます.
    六、Hibernate sessionとスレッドをバインドする
    セッションはスレッド分離のリソースであることを知っているので,同時開発ではセッションのバインドに用いる.
    フレームワークによる実装の完了
    (1)コアプロファイルでの構成
    thread
    

    (2)呼び出しツールクラスメソッドローカルスレッドバインドセッションを返す
    Session session = sessionFactory.getCurrentSession();
    

    (3)ローカルバインドされたセッションを取得する場合、ローカルスレッドに関連付けられているため、セッションを手動で閉じる必要はありません.そうしないと、エラーが発生します.
    復習時間:転送ゲート
    隔離性を考慮せずに問題が発生する
    汚読
    ダーティリードとは、別のトランザクションがロールバックされる前のダーティデータを読み取ることです.たとえば、トランザクションBが実行中にデータXを修正し、コミットされない前にトランザクションAがXを読み取り、トランザクションBがロールバックすることで、トランザクションAがダーティリードを形成します.
    繰り返し不可:
    トランザクションAが最初に1つのデータを読み出し、論理を実行すると、トランザクションBがこのデータを変更し、トランザクションAが再び読み出すと、データが一致しないことに気づき、いわゆる繰り返し不可となります.
    すなわち、現在のトランザクションは、まず1回データの読み取りを行い、次に再び読み込まれたデータは、他のトランザクションが正常に修正されたデータであり、2回読み込まれたデータが一致しないため、再読み取り不可の意味に従っている.
    まぼろし読み
    トランザクションAは、まず条件インデックスに基づいてN個のデータを取得し、その後、トランザクションBがこのN個のデータ以外のM個を変更したり、トランザクションAの検索条件に合致するM個のデータを追加したりして、トランザクションAが再びN+M個のデータを検索して発見したことによって、幻読みが発生する.
    すなわち、現在のトランザクションが最初にフェッチしたデータは、後でフェッチしたデータエントリよりも少ない.
    繰り返し不可と幻の比較:
    両者は似ていますが、前者はupdateまたはdelete、後者はinsertを対象としています.