mybatis 3.4.2 Default Sql Sessionの配置
Default Sql Session FactoryでもSql Session ManagerでもsessionはそのDefault Sql Sessionです。
Sql Session Managerが解決したのは、現在のスレッド中のセッションをキャッシュするだけで、セッションの多重化を実現します。Default Sql Session Factoryが提供したSQL操作ごとに新たなセッション例を作成します。
前のいくつかの文章は配置ファイルからsessionに分析されました。
一、セッションの構成を見てみます。
1、セッションの入り口を取得する
1、ExectorType
ExectorTypeは列挙類です。
3、Transaction Factory
このTransactoryには、プロファイルmybatis-config.xmlのenvironmentsのサブ要素transpationManagerが対応しています。
Configrationの構造関数からこれらのパラメータの任意の値が見られます。
実際にManagedTransationの多くの方法は空です。Jdbc Transationを使用します。
Transation txは、アクチュエータexectorに値を与えられる。
Sql Session Managerが解決したのは、現在のスレッド中のセッションをキャッシュするだけで、セッションの多重化を実現します。Default Sql Session Factoryが提供したSQL操作ごとに新たなセッション例を作成します。
前のいくつかの文章は配置ファイルからsessionに分析されました。
一、セッションの構成を見てみます。
1、セッションの入り口を取得する
public SqlSession openSession() {
return openSessionFromDataSource(configuration.getDefaultExecutorType(), null, false);
}
2、配置セッション private SqlSession openSessionFromDataSource(ExecutorType execType, TransactionIsolationLevel level, boolean autoCommit) {
Transaction tx = null;
try {
final Environment environment = configuration.getEnvironment();
final TransactionFactory transactionFactory = getTransactionFactoryFromEnvironment(environment);
tx = transactionFactory.newTransaction(environment.getDataSource(), level, autoCommit);
final Executor executor = configuration.newExecutor(tx, execType);
return new DefaultSqlSession(configuration, executor, autoCommit);
} catch (Exception e) {
closeTransaction(tx); // may have fetched a connection so lets call close()
throw ExceptionFactory.wrapException("Error opening session. Cause: " + e, e);
} finally {
ErrorContext.instance().reset();
}
}
3、関連パラメータ ExecutorType execType = configuration.getDefaultExecutorType();
Executor executor = configuration.newExecutor(tx, execType);
TransactionIsolationLevel level= null;
boolean autoCommit = false;
TransactionFactory transactionFactory= getTransactionFactoryFromEnvironment(environment);
Transaction tx = transactionFactory.newTransaction(environment.getDataSource(), level, autoCommit);
二、パラメータの取得1、ExectorType
ExectorTypeは列挙類です。
public enum ExecutorType {
SIMPLE, REUSE, BATCH
}
Configrationクラスでは、設定されているdefaultExectorTypeのデフォルト値はExectorType.SIMPPLEです。public class Configuration {
...
protected ExecutorType defaultExecutorType = ExecutorType.SIMPLE;
...
}
ExectorTypeの設定は、sessionのアクチュエータExectorが異なる実現クラスを使用することを決定します。Executor executor = configuration.newExecutor(tx, execType);
2、sessionアクチュエータの設定とパッケージExectorTypeはsessionアクチュエータのパッケージポリシーを決定します。 public Executor newExecutor(Transaction transaction, ExecutorType executorType) {
executorType = executorType == null ? defaultExecutorType : executorType;
executorType = executorType == null ? ExecutorType.SIMPLE : executorType;
Executor executor;
if (ExecutorType.BATCH == executorType) {
executor = new BatchExecutor(this, transaction);
} else if (ExecutorType.REUSE == executorType) {
executor = new ReuseExecutor(this, transaction);
} else {
executor = new SimpleExecutor(this, transaction);
}
if (cacheEnabled) {
executor = new CachingExecutor(executor);
}
executor = (Executor) interceptorChain.pluginAll(executor);
return executor;
}
sessionアクチュエータexectorは、SimpleExector、ReuseExector、およびBatch Exectorの3つしかない。そして、cacheを開くと、CachingExectorを飾り、すべてのプラグインチェーンのアクチュエータを包装する。executor = (Executor) interceptorChain.pluginAll(executor)
アクチュエータの関係の後に別の文章を紹介します。3、Transaction Factory
このTransactoryには、プロファイルmybatis-config.xmlのenvironmentsのサブ要素transpationManagerが対応しています。
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${db.driver}" />
<property name="url" value="${db.url}" />
<property name="username" value="${db.username}" />
<property name="password" value="${db.password}" />
<property name="poolPingQuery" value="SELECT NOW()" />
<property name="poolPingEnabled" value="true" />
dataSource>
environment>
environments>
tractionManagerの取得値は二つだけです。JDBCとMANAGEDが設定されていない場合、mybatisはMANAGEDを使ってsessionを設定します。Configrationの構造関数からこれらのパラメータの任意の値が見られます。
public Configuration() {
typeAliasRegistry.registerAlias("JDBC", JdbcTransactionFactory.class);
typeAliasRegistry.registerAlias("MANAGED", ManagedTransactionFactory.class);
typeAliasRegistry.registerAlias("JNDI", JndiDataSourceFactory.class);
typeAliasRegistry.registerAlias("POOLED", PooledDataSourceFactory.class);
typeAliasRegistry.registerAlias("UNPOOLED", UnpooledDataSourceFactory.class);
typeAliasRegistry.registerAlias("PERPETUAL", PerpetualCache.class);
typeAliasRegistry.registerAlias("FIFO", FifoCache.class);
typeAliasRegistry.registerAlias("LRU", LruCache.class);
typeAliasRegistry.registerAlias("SOFT", SoftCache.class);
typeAliasRegistry.registerAlias("WEAK", WeakCache.class);
typeAliasRegistry.registerAlias("DB_VENDOR", VendorDatabaseIdProvider.class);
typeAliasRegistry.registerAlias("XML", XMLLanguageDriver.class);
typeAliasRegistry.registerAlias("RAW", RawLanguageDriver.class);
typeAliasRegistry.registerAlias("SLF4J", Slf4jImpl.class);
typeAliasRegistry.registerAlias("COMMONS_LOGGING", JakartaCommonsLoggingImpl.class);
typeAliasRegistry.registerAlias("LOG4J", Log4jImpl.class);
typeAliasRegistry.registerAlias("LOG4J2", Log4j2Impl.class);
typeAliasRegistry.registerAlias("JDK_LOGGING", Jdk14LoggingImpl.class);
typeAliasRegistry.registerAlias("STDOUT_LOGGING", StdOutImpl.class);
typeAliasRegistry.registerAlias("NO_LOGGING", NoLoggingImpl.class);
typeAliasRegistry.registerAlias("CGLIB", CglibProxyFactory.class);
typeAliasRegistry.registerAlias("JAVASSIST", JavassistProxyFactory.class);
languageRegistry.setDefaultDriverClass(XMLLanguageDriver.class);
languageRegistry.register(RawLanguageDriver.class);
}
Jdbc Transactoryが作成したのはJdbc Transationです。ManagedTransactoryが作成したのはManaged Transationです。実際にManagedTransationの多くの方法は空です。Jdbc Transationを使用します。
Transation txは、アクチュエータexectorに値を与えられる。
Transaction tx = transactionFactory.newTransaction(environment.getDataSource(), level, autoCommit);
Executor executor = configuration.newExecutor(tx, execType);
アクチュエータexectorはconfigrationと共にDefault Sql Sessionを生成する。new DefaultSqlSession(configuration, executor, autoCommit);
Created with Rapha_l 2.10からプロファイルmapping/mybatis-config.xmlは、入力ストリームInputStream inputStream=Resource.gets Astreamを含む。Sql Session Manager sql Session Manager=Sql Session Manager.newInstance(inputStream);sql Session Manager.startManagedSession()sql Session Managerを使ってデータベースの操作を終了します。