mybatis源碼閱讀-SqlSession(三)
阿新 • • 發佈:2018-07-07
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, booleanautoCommit) { 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(三)