この記事では主に、2次キャッシュに関するMyBatisの問題を紹介します。2次キャッシュは、複数のSQLSessionが同じMapperを動作させる場合、その2次キャッシュを共有することができます。
MyBatis は 1 次キャッシュと 2 次キャッシュを提供します。1 次キャッシュは sqlSession レベルのキャッシュであり、異なる sqlSession 間のキャッシュは相互に影響しません。 2次キャッシュはMapperレベルのキャッシュであり、複数のsqlSessionが同じMapper上で動作し、その2次キャッシュを共有することができます。Memcached のサポートは比較的成熟しています。ここでは、Memcached を例として Spring プロジェクトとの統合を紹介します。
configuration
を使用してpom.<dependencies> ... <dependency> <groupId>org.mybatis.caches</groupId> <artifactId>mybatis-memcached</artifactId> <version>1.0.0</version> </dependency> ... </dependencies>
グローバルスイッチ
<settings> <setting name="cacheEnabled" value="true"/> </settings>
キャッシュする必要があるmapper.xmlを設定します
2次キャッシュはMapperレベルであり、特定のmapper.xmlに対して2次キャッシュをオンにすることができます。<mapper namespace="org.acme.FooMapper"> <cache type="org.mybatis.caches.memcached.MemcachedCache" /> </mapper>をオンにすると、マッパー内のすべての select ステートメントがデフォルトでキャッシュされ、この
namespace の下にあるすべての insert、update、および delete ステートメントにより、スペース内のキャッシュがクリアされます。
キャッシュは特定のステートメントに対して無効にすることができます。<select id="retObj" resultMap="results" useCache="false" > select id, name, sex from employee </select>は、特定のステートメントの更新アクションをトリガーすることもできます (デフォルトは、すべての insert、
update、delete ステートメントに対応します)。
<select id="retObj" resultMap="results" flushCache="true" > select id, name, sex from employee </select>構成パラメーターは memcached.properties で設定されます。欠落している場合は、デフォルト設定が使用されます。 以下は設定パラメータです:
キャッシュ操作ログを記録する必要がある場合は、次の設定で実現できます
<mapper namespace="org.acme.FooMapper"> <cache type="org.mybatis.caches.memcached.LoggingMemcachedCache" /> ... </mapper>Memcachedにキャッシュされたクラスは実装する必要がありますそれ以外の場合は、エラー java.io.NotSerializable
Exception が報告されます。
2次キャッシュの適用シナリオ
実装方法は以下の通りです。
mybatis の制限事項
mybatis の 2 次キャッシュは、きめ細かいデータ レベルのキャッシュが苦手です。以上が二次キャッシュの問題に関する MyBatis コード例の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。