MyBatisの1次キャッシュを手動で更新する方法
MyBatisの1次キャッシュは自動化されており、手動で更新する必要はありません。1次キャッシュは同じSqlSession内で有効で、クエリを実行するとクエリの結果はキャッシュされ、同じクエリ文を次に実行したときはキャッシュから直接結果を取得し、クエリ要求は送信されません。
SqlSessionのclearCache()メソッドを使えば、1次キャッシュを手動でリフレッシュすることができる。これにより、現在のSqlSessionにいるすべてのキャッシュ対象(1次キャッシュと2次キャッシュ)が削除される。
サンプルコードを以下に示します。
SqlSession session = sqlSessionFactory.openSession();
try {
// 执行查询操作
List<User> userList = session.selectList("getUserList");
// 手动刷新一级缓存
session.clearCache();
// 再次执行相同的查询操作
List<User> userList2 = session.selectList("getUserList");
} finally {
session.close();
}
上記のコードでは、まず検索クエリを実行し、その結果をキャッシュします。その後、clearCache()メソッドを呼び出し、1次キャッシュを手動でフラッシュします。最後に、同じ検索クエリを再度実行すると、キャッシュから結果を取得するのではなく、新たな検索リクエストが発生します。
なお、1次キャッシュはSqlSessionのライフサイクル有効で、SqlSessionが閉じられると1次キャッシュも破棄されますので、同じSqlSession内で同じクエリ操作を複数回実行したい場合は、1次キャッシュを手動でリフレッシュするか、2次キャッシュを利用してください。