MyBatisを使って検索を行う場合、デフォルトの動作として、同一トランザクション内に同じパラメータで呼び出すと、2回目以降はSQLを発行せずに、キャッシュされているインスタンスが返却される仕組みになっています。
MyBatis は循環参照の解決やネストされたクエリのスピード向上のためにローカルキャッシュを使用します。 デフォルト(SESSION)では同一セッション内の全てのクエリ結果がキャッシュされます。localCacheScope に STATEMENT を設定した場合、ローカルキャッシュはステートメントごとに適用されます。言い換えると、同一 SqlSession に対する複数の呼び出しでデータが共有されることはありません。
キャッシュを無効にする
以下のように設定すると、ローカルキャッシュをステートメント単位で管理するように変更できます。 ステートメント単位で管理する場合、MyBatisは毎回SQLを実行して最新のEntityを取得します。
application.properties
mybatis.config-location=classpath:/mybatis/mybatis-config.xml
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="localCacheScope" value="STATEMENT" />
</settings>
</configuration>