mybatis源码阅读-SqlSession(三)

类图

我们可以看到他有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哦)

猜你喜欢

转载自www.cnblogs.com/LQBlog/p/9277869.html