レベル1キャッシュ
最初のレベルのキャッシュはSqlSessionレベルのキャッシュであり、SqlSessionにフラッシュまたはクローズがない限り存在します。
SqlSessionの変更、追加、削除、コミット()、クローズ()およびその他のメソッドを呼び出すと、1次キャッシュがクリアされます。
初めてユーザーID 1のユーザー情報をクエリするときは、最初にキャッシュに移動して、ID 1のユーザー情報があるかどうかを確認し、ない場合は、データベースからユーザー情報をクエリします。
ユーザー情報を取得すると、ユーザー情報は1次キャッシュに格納されます。
sqlSessionがコミット操作を実行する場合は、SqlSessionの第1レベルのキャッシュをクリアします。これの目的は、キャッシュに最新の情報を保存させ、ダーティリードを回避することです。
ユーザーID 1のユーザー情報を照会する2回目は、最初にキャッシュに移動して、ID 1のユーザー情報があるかどうかを確認し、キャッシュにある場合は、キャッシュから直接ユーザー情報を取得します。
二次キャッシュ
2次キャッシュはマッパーマップレベルキャッシュであり、複数のSqlSessionがマッパーによってマップされた同じSQLステートメントで動作します。
複数のSqlSessionが2次キャッシュを共有でき、2次キャッシュはSqlSession全体に存在します。
Mybatisの2次キャッシュをオンにした後、SqlSession1はユーザー情報を照会し、照会されたユーザー情報は2次キャッシュに照会データを格納します。
SqlSession3が同じマッパーマップの下でSQLを実行し、コミットを実行すると、マッパーマップの下の2次キャッシュ領域のデータは消去されます。
SqlSession2は、SqlSession1と同じユーザー情報を照会するために、キャッシュから直接データがある場合は、最初にキャッシュからのデータがあるかどうかを調べます。
2次キャッシュのオンとオフを切り替える
SqlMapConfig、xmlファイルで2次キャッシュを開く
<settings> <!-セカンダリキャッシュサポートをオンにする-> <setting name = "cacheEnabled" value = "true" /> </ settings> cacheEnabledの値はデフォルトでtrue であるため、この手順は省略できます。構成。ある真の二次キャッシュのオープン代表;され偽の二次キャッシュの代表がオンになっていません。
関連するマッパーマッピングファイルを構成します。<cache>タグは、現在のマッパーマッピングが2次キャッシュを使用することを示します。区別する標準は、マッパー名前空間の値によって異なります。
<?xml version = "1.0" encoding = "UTF-8"?> <!DOCTYPEマッパー PUBLIC "-// mybatis.org//DTD Mapper 3.0 // EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace = "com.itcast.dao。 IUserDao "> <!-开启二级缓存的サポート-> <cache> </ cache> </ mapper>
ステートメントのuseCache属性を構成する
<!-根拠id查询->
<select id = "findById" resultType = "user" parameterType = "int" useCache = "true"> select * from user where id = #{uid} </ select>
UserDao.xmlマッピングファイルの<select>タグでuseCache =” true”を設定して、現在のステートメントが2次キャッシュを使用する必要があることを示します。使用しない場合は、falseに設定できます。注:最新のデータsqlを必要とするクエリごとに、useCache = falseを設定して、2次キャッシュを無効にする必要があります。
2次キャッシュを使用する場合、キャッシュされたクラスはjava.io.Serializableインターフェースを実装する必要があります。これは、直列化を使用してオブジェクトを保存できます。