ホームページ  >  記事  >  Java  >  Mybatis の 2 次キャッシュについての深い理解

Mybatis の 2 次キャッシュについての深い理解

高洛峰
高洛峰オリジナル
2017-01-23 09:35:031438ブラウズ

前の記事で mybatis の 1 次キャッシュについて紹介しました。必要な友達はそれを参照してください。

一次キャッシュと比較して、二次キャッシュは範囲が広く、複数の SqlSession で共有できます。

同様に、同じクエリ SQL を送信すると、最初にキャッシュ内が検索され、見つからない場合はデータベースにクエリが実行されます。

各名前空間マッパーには独自のキャッシュ スペースがあります。

2 つのマッパーの名前空間が同じ場合、マッパーの実行によってクエリされたデータは同じ 2 次キャッシュに保存されます

同様に、sqlSession がコミットを実行すると、2 次キャッシュがクリアされます。

設定ファイル (設定なしでデフォルトで有効になります)):

sqlMapConfig.xml:

<setting name="cacheEnabled" value="true"/>

対応するmapper.xml:

e20c50086bb6799ec27a6a73752fc01b

必要ない場合2次キャッシュについては、設定で2次キャッシュを無効にすることができます

<select useCache="false"></select>

このようにして、データベースから読み取られるたびに

挿入の実行後にキャッシュが更新されます(キャッシュがクリアされます)。 update、delete を更新しないように設定できます

通常は設定されておらず、この設定によりダーティ リードが発生する可能性があります。

<insert 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的用户
   User user1 = mapper1.findUserById(1);
   System.out.println(user1);
   //close 将数据写入二级缓存
   session1.close();
   //清空二级缓存,UserMapper下的
   user1.setUsername("mmm");
   mapper3.updateUser(user1);
   session3.commit();
   //第二次查询会从缓存中找
   User user2 = mapper2.findUserById(1);
   System.out.println(user2);
   session2.close();

キャッシュされるオブジェクトに注意してください。これらのキャッシュされたデータは逆シリアル化されてハードディスクまたは他の場所に書き込まれる可能性があるため、ここでは Serilizable インターフェイスを実装する必要があります。

上記は編集者によって紹介された Mybatis の 2 次キャッシュです。ご質問がございましたら、メッセージを残してください。編集者がすぐに返信します。また、PHP 中国語 Web サイトをサポートしていただきありがとうございます。

Mybatis の 2 次キャッシュ関連記事をさらに詳しく理解するには、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。