文章目录
引子
//1.如何创建?
SqlSession sqlSession = getSessionFactory().openSession();
UserDao userMapper = sqlSession.getMapper(UserDao.class);
public class DefaultSqlSessionFactory implements SqlSessionFactory
public SqlSession openSession() {
return this.openSessionFromDataSource(
this.configuration.getDefaultExecutorType(),//2 由configuration获得默认执行器类型
(TransactionIsolationLevel)null, //隔离等级为空
false);//默认就不要自动提交sql
}
Configutation.class
public ExecutorType getDefaultExecutorType() {
return this.defaultExecutorType;//我尝试了,但没有找多执行器类型。
}
public enum ExecutorType {
SIMPLE,
REUSE,
BATCH;
private ExecutorType() {
}
}
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);
//由执行器和其它两个参数创建SqlSession,这里可以看出执行器是高层API接口层的底部,属于数据处理层
} catch (Exception var12) {
this.closeTransaction(tx);
throw ExceptionFactory.wrapException("Error opening session. Cause: " + var12, var12);
} finally {
ErrorContext.instance().reset();
}
return var8;
}