MyBatisの2次キャッシュ


一級キャッシュの欠陥
  • 想像してみてください.sqlSessionはスレッドが安全ではなく、メソッドボディ内部に定義されたローカル変数です.このとき、1人のユーザからリクエストが来て、もう1人のユーザからリクエストが来ましたが、この2つのリクエストは同じsqlsessionではないので、キャッシュを使用することはできません.
  • mybatisとspringの統合後にmapperエージェントの開発を行い、一級キャッシュ、mybatisとspringの統合をサポートせず、springはmapperのテンプレートに従ってmapperエージェントオブジェクトを生成し、テンプレートでは最後にsqlsessionを統一的に閉じる.

  • 二次キャッシュの説明
    二次キャッシュの役割範囲はmapperレベル(異なるmapper.xmlは同じnamespaceを持つことができ、ここではnamespaceが同じであればよい)であり、mapperはネーミングスペース単位でキャッシュのデータ構造を作成する
    二次キャッシュ、一級キャッシュ、データベースの読み込み順序
    クエリーのたびに、2次キャッシュが開いているかどうかを確認します.開いている場合は、2次キャッシュからデータを取得してみます.取得されていない場合は、1次キャッシュから取得します.1次キャッシュにない場合は、データベースからデータを読み込みます.
    二次キャッシュの使用
    2次キャッシュは1次キャッシュとは異なり、SqlMapConfigでcacheを開くように手動で構成する必要があります.
        <settings>
            
            <setting name="cacheEnabled" value="true"/>
        settings>

    二次キャッシュの無効化
    頻繁に変更されるデータについては、2次キャッシュの使用を禁止する必要があります.要求があるたびにデータベースをクエリーする必要があります.この場合、statementで設定できます.useCache=「false」です.これは、1次バッファではなく2次キャッシュを無効にすることに注意してください.
        <select id="findUserById" parameterType="int" resultType="user" useCache="false">
            select * from user where id = #{id}
        select>

    未完