前回の記事では、キーとなるオブジェクトSqlSessionFactoryの作成プロセスでmybatisを紹介しましたが、この記事では引き続きエクゼキュータexecutorを紹介します。各SqlSessionはエクゼキュータオブジェクトを持ち、このオブジェクトは操作の追加、削除、変更、チェックを担当します。のカプセル化されたバージョンです。
executor継承構造
- エクゼキュータ・インターフェース: BaseExecutor、CachingExecutor の2つの実装クラスがあります。
- BaseExecutorは:抽象クラスは、抽象クラスは、インターフェイスのメソッドの実装にクラスの実装の次のレベルを容易にするために、"アダプタパターン "の実施形態です、BatchExecutorです。
- SimpleExecutor:デフォルトのMyBatisエグゼキュータです。 updateやselectを実行するたびに、ステートメントオブジェクトを開き、すぐにステートメントオブジェクトを閉じます。
- ReuseExecutor:再利用可能なエクゼキュータで、再利用とはStatementの再利用を意味します。 作成されたすべてのStatementを内部的にキャッシュするためにMapを使用し、SQL文を実行するたびにSQLキャッシュに基づいてStatementオブジェクトがあるかどうかを判断し、Statementオブジェクトがあり、キャッシュされたStatementオブジェクトが閉じられていなければ、そのStatementオブジェクトを使用し続けます。ステートメント・オブジェクトが存在し、キャッシュされたステートメント・オブジェクトに対応する接続が閉じられていない場合、そのステートメント・オブジェクトを使用し続け、そうでない場合、新しいステートメント・オブジェクトを作成し、それをキャッシュします。新しい SqlSession はそれぞれ新しい Executor オブジェクトを持つため、ReuseExecutor にキャッシュされた Statement は同じ SqlSession にスコープされます。
- BatchExecutor: バッチエグゼキュータ。複数のSQLステートメントを一度に実行するためにデータベースに配信するために使用されます。
Executor
SqlSessionFactory が作成されたら、openSession メソッドを呼び出します:
public SqlSession openSession() {
return this.openSessionFromDataSource(this.configuration.getDefaultExecutorType(), (TransactionIsolationLevel)null, false);
}
private SqlSession openSessionFromDataSource(ExecutorType execType, TransactionIsolationLevel level, boolean autoCommit) {
Transaction tx = null;
DefaultSqlSession var8;
try {
Environment environment = this.configuration.getEnvironment();
TransactionFactory transactionFactory = this.getTransactionFactoryFromEnvironment(environment);
tx = transactionFactory.newTransaction(environment.getDataSource(), level, autoCommit);
Executor executor = this.configuration.newExecutor(tx, execType);
var8 = new DefaultSqlSession(this.configuration, executor, autoCommit);
} catch (Exception var12) {
this.closeTransaction(tx);
throw ExceptionFactory.wrapException("Error opening session. Cause: " + var12, var12);
} finally {
ErrorContext.instance().reset();
}
return var8;
}
ExcecutorType
ExecutorType は、Configuration オブジェクトが作成するエクゼキュータのタイプを決定します。これは2つの場所で割り当てることができます。
最初に。タグを使用することで、現在のプロジェクト内のすべての SqlSession オブジェクトで使用されるデフォルトの Executour を設定することができます。
元の住所





