MyBatisには、非常に強力なクエリキャッシュ機能が含まれており、非常に簡単にカスタマイズできます。デフォルトでは、キャッシュは有効になりません。レベル2キャッシュを有効にするには、SQLマッピングファイルに行を追加する必要があります。
<キャッシュ/>
それは文字通りです。この単純なステートメントの効果は次のとおりです。
1.マッピングステートメントファイルのすべての選択ステートメントがキャッシュされます。
2。ステートメントファイルのすべての挿入、更新、および削除されたすべての挿入、更新、および削除キャッシュが更新されます。
3.キャッシュは、最近使用されていない(LRU、最近使用されていない)アルゴリズムを使用して再試行されます。
4。時刻表(フラッシュ間隔なし、更新間隔なしなど)によると、キャッシュは年代順に更新されません。
5.キャッシュは、リストコレクションまたはオブジェクトへの参照1024を保存します(クエリメソッドが返すものに関係なく)。
6.キャッシュは、読み取り/書き込み(読み取り可能/書き込み可能)キャッシュと見なされます。つまり、オブジェクトの検索は共有されず、他の発信者やスレッドによる潜在的な変更を妨げることなく、発信者によって安全に変更できます。
これらのプロパティはすべて、キャッシュ要素のプロパティによって変更できます。例えば:
<cache eviction = "fifo" flushinterval = "60000" size = "512" readonly = "true"/>
このより高度な構成により、FIFOキャッシュが作成され、60秒ごとにリフレッシュされ、結果のオブジェクトまたはリストに512の参照を保存します。また、返されたオブジェクトは読み取り専用と見なされるため、異なるスレッドの発信者間でそれらを変更すると競合が発生します。
利用可能な検索戦略は次のとおりです。
デフォルトはLRUです。
Flushintervalは任意の正の整数に設定でき、合理的なミリ秒の期間を表します。デフォルトは設定されていません。つまり、更新間隔はありません。ステートメントが呼び出された場合にのみキャッシュが更新されます。
サイズ(参照の数)は、キャッシュするオブジェクトの数と、実行中の環境で利用可能なメモリリソースの数を覚えている任意の正の整数に設定できます。デフォルト値は1024です。
readonlyプロパティは、trueまたはfalseに設定できます。読み取り専用キャッシュは、キャッシュオブジェクトの同じインスタンスをすべての発信者に返します。したがって、これらのオブジェクトは変更できません。これは、重要なパフォーマンスの利点を提供します。読み取り可能で書き込み可能なキャッシュは、キャッシュオブジェクトのコピーを返します(シリアル化により)。これは遅くなりますが安全なので、デフォルトでは誤っています。
カスタムキャッシュを使用します
これらのカスタムキャッシュメソッドに加えて、独自のキャッシュを実装したり、他のサードパーティキャッシュシナリオのアダプターを作成したりすることで、キャッシュ動作を完全に上書きすることもできます。
<cache type =” com.domain.something.mycustomcache”/>
この例は、カスタムキャッシュの実装の使用方法を示しています。型属性によって指定されたクラスは、org.mybatis.cache.cacheインターフェイスを実装する必要があります。このインターフェイスは、MyBatisフレームワークの多くの複雑なインターフェイスの1つですが、単にそれが何をしているかを単純に与えることは問題ありません。
public interface cache {string getId(); int getsize(); void putobject(オブジェクトキー、オブジェクト値); Object GetObject(Object Key); Boolean Haskey(オブジェクトキー);オブジェクトremoveObject(オブジェクトキー); void clear(); readwriteLock getReadWritelock(); }参照キャッシュ
たぶん、将来的には、名前空間で同じキャッシュ構成とインスタンスを共有することをお勧めします。この場合、Cache-Ref要素を使用して別のキャッシュを参照できます。
<cache-ref namespace =” com.someone.application.data.somemapper”/>