1. 程式人生 > >mybatis源碼閱讀-SqlSession(三)

mybatis源碼閱讀-SqlSession(三)

vat 創建 源碼 ott .sql conf use mit mys

類圖

技術分享圖片

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

mybatis源碼閱讀-SqlSession(三)