前の記事では、MyBatisレベル1キャッシュを紹介します。困っている友達はそれを参照できます。
第1レベルのキャッシュと比較して、セカンドレベルのキャッシュは範囲が大きく、複数のSQLSessionsで共有できます。
同じクエリを送信すると、SQLは最初にキャッシュで検索し、次にデータベースが見つからない場合はデータベースを照会します。
各名前空間マッパーには、独自のキャッシュスペースがあります。
2つのマッパーの名前空間が同じ場合、マッパーを実行することでクエリが照会され、同じレベル2キャッシュに保存されます。
同様に、SQLSessionが実行され、コミットが実行されると、セカンダリキャッシュがクリアされます。
構成ファイル(設定なしでデフォルトでも有効になっています):
sqlmapconfig.xml:
<name = "cacheenabled" value = "true"/>を設定します
対応するmapper.xmlで:
<cache/>
セカンダリキャッシュが必要ない場合は、設定でセカンダリキャッシュを無効にすることができます
<usecache = "false"> </select>を選択します
これは、毎回データベースから読み取られます
挿入、更新、削除、キャッシュが更新され(キャッシュがクリア)、更新されないように設定できます。
一般的に設定されていないため、設定は汚い読みを引き起こす可能性があります。
<flushcache = "false"> </insert>を挿入します
小さな例:
sqlsession session1 = factory.opensession(); sqlsession session2 = factory.opensession(); sqlsession session3 = factory.opensession(); usermapper mapper1 = session1.getMapper(usermapper.class); usermapper mapper2 = session2.getMapper(usermapper.class); usermapper mapper3 = session3.getMapper(usermapper.class); //最初の要求は、ID 1ユーザーユーザー1 = mapper1.finduserbyid(1)でユーザーを照会することです。 System.out.println(user1); // secondaryセカンダリキャッシュSESSION1.CLOSE()に書き込みデータを閉じます。 //二次キャッシュ、user1.setusername( "mmm")をクリアします。 mapper3.updateuser(user1); session3.commit(); // 2番目のクエリでは、ユーザーユーザー2 = mapper2.finduserbyid(1)を探します。 System.out.println(user2); session2.close();
レベル2でキャッシュするオブジェクトは、これらのキャッシュされたデータが脱必要にされ、ハードディスクまたは他の場所に書き込まれる可能性があるため、セリリライズ可能なインターフェイスを実装する必要があることに注意してください。
上記は、編集者が紹介したMyBatisレベル2キャッシュです。それがあなたに役立つことを願っています。ご質問がある場合は、メッセージを残してください。編集者は時間内に返信します。 wulin.comのウェブサイトへのサポートをありがとうございました!