标签:man cot throw row har return cat ORC auto
我们可以看到他有2个实现类 不过我们只关注DefaultSqlSession就行了
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 {
//1.对于我们xml environment节点配置的事物以及数据源的相关信息 Environment environment = this.configuration.getEnvironment();
//2.创建事物管理器 TransactionFactory transactionFactory = this.getTransactionFactoryFromEnvironment(environment); tx = transactionFactory.newTransaction(environment.getDataSource(), level, autoCommit);
//3.创建Executor(后面讲) newExecutorr方法里面是根据我们配置的默认的execottype创建对应的Executor实现类 Executor executor = this.configuration.newExecutor(tx, execType);
//4.初始化DefaultSqlSession 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; }
1.SqlSessionFactory将我们的以下配置以Environment对象封装起来了
<!-- 对事务的管理和连接池的配置 --> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <!--UNPOOLED 非连接池 POOLED mybatis提供的POOLED连接池 JNDI mybtais提供的JNDIfacotory获取数据源 根据配置找到对应的工厂 创建对应的数据源 可以直接配置工厂 需要实现UnpooledDataSourceFactory --> <dataSource type="com.liqiang.core.C3P0DataSourceFactory"> <property name="driverClass" value="com.mysql.jdbc.Driver" /> <property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/DTest?characterEncoding=UTF-8" /> <property name="user" value="root" /> <property name="password" value="root" /> </dataSource> </environment> </environments>
2. <transactionManager type="JDBC|MANAGED" />根据我们的配置创建对应的事物管理器 MANAGED是空实现,事物交给容器实现 比如spirng整合的时候
3.根据我们配置的默认Execotor创建对应的处理器 mybatis.xml配置(Execotor作用 后面讲)
<settings> <setting name="defaultExecutorType" value="SIMPLE,REUSE,BATCH" /> //默认SiMPLE </settings>
最终将我们的Configuration 和默认的Execotor实现类通过构造函数传入DefaultSqlSession 并进行初始化(这里注意 后续DefaultSqlSession 进行crud操作可以访问Configuration哦)
标签:man cot throw row har return cat ORC auto
原文地址:https://www.cnblogs.com/LQBlog/p/9277869.html