MyBatis | 検索結果を任意のJavaオブジェクトにマッピング | キャッシュ
ソースコード
Main.java
package sample.mybatis;
import java.io.InputStream;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class Main {
public static void main(String[] args) throws Exception {
try (InputStream in = Main.class.getResourceAsStream("/mybatis-config.xml")) {
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
try (SqlSession session1 = factory.openSession();
SqlSession session2 = factory.openSession();) {
TestTable testTable = selectAndPrintln("session1", session1);
testTable.setValue("update");
selectAndPrintln("session1", session1);
selectAndPrintln("session2", session2);
}
}
}
private static TestTable selectAndPrintln(String tag, SqlSession session) {
TestTable result = session.selectOne("sample.mybatis.selectTest");
System.out.printf("<<%s>> %s%n", tag, result);
return result;
}
}
実行結果
[DEBUG] s.m.selectTest - ==> Preparing: select * from test_table where id=1
[DEBUG] s.m.selectTest - ==> Parameters:
[DEBUG] s.m.selectTest - <== Total: 1
<<session1>> TestTable [id=1, value=hoge]
<<session1>> TestTable [id=1, value=update]
[DEBUG] s.m.selectTest - ==> Preparing: select * from test_table where id=1
[DEBUG] s.m.selectTest - ==> Parameters:
[DEBUG] s.m.selectTest - <== Total: 1
<<session2>> TestTable [id=1, value=hoge]
説明
- 検索結果はキャッシュされる。
- 同じ検索を再度実行すると、キャッシュされたオブジェクトが返される。
- キャッシュはセッションごとに保存されるため、別のセッションでの変更の影響を受けない。
- デフォルトでは、次のような動作をするようである。
- 1024個のオブジェクトをキャッシュする。
- 最も使用されていないキャッシュから削除されていく。
- 時間経過では削除されない。
- insert、update、deleteが実行されるとキャッシュはクリアされる。
- このデフォルト動作は設定ファイルで上書きできる。
- 設定の詳細はこちらを参照すること。