Mybatis源码研究5:数据源的实现
2019獨角獸企業重金招聘Python工程師標準>>>
一、數據源概述
?數據源相關核心類位于datasource包中,本包主要引用了Mybatis的reflection的ExceptionUtil類和loggin包的Log接口和LogFactory類。
?
?Mybatis的session包的Configuration類,builder.xml包的XMLConfigBuilder類引用了本包中的類和接口。
?
?二、核心接口
?DataSourceFactory接口定義了2個方法:
?
?//設置屬性
?void setProperties(Properties props);
?//獲取數據源
?DataSource getDataSource();
?
?javax.sql.DataSource接口定義了2個方法:
?
?//獲取連接
?Connection getConnection() throws SQLException;
??
?//根據用戶名和密碼等參數獲取連接
?Connection getConnection(String username, String password)throws SQLException;
?
三、核心接口的3種實現
1. JNDI實現(位于datasource.jndi子包中)
?? JndiDataSourceFactory實現了DataSourceFactory接口。
??
?? 提供DataSource實現類的關鍵代碼:
??
?? InitialContext initCtx = new InitialContext();
??
?? Context ctx = (Context) initCtx.lookup(properties.getProperty(INITIAL_CONTEXT));
??????
? DataSource?dataSource = (DataSource) ctx.lookup(properties.getProperty(DATA_SOURCE));
??????
2. 連接池實現(位于datasource.pooled子包中)
?? PooledDataSourceFactory繼承UnpooledDataSourceFactory,從而實現了DataSourceFactory接口。
??
?? 關鍵在于構造方法:
?? public PooledDataSourceFactory() {
??this.dataSource = new PooledDataSource();
?}
?
?構造方法中,dataSource使用的是 PooledDataSource。
?
? PooledDataSource實現了DataSource接口,維護了若干個 數據庫連接。
??
3. 非連接池實現(位于datasource.unpooled子包中)
? UnpooledDataSourceFactory實現了DataSourceFactory接口。
?
? UnpooledDataSource實現了DataSource接口,提供了獲取數據庫連接Connection的2個方法。
?
? 內部維護了 獲取一個數據庫連接的若干屬性,包括但不限于:
?? String driver;//驅動名
?? String url;//數據庫訪問路徑
?? String username;//用戶名
?? String password;//密碼
?? boolean autoCommit;//是否自動提交
?
?
? 注:PooledDataSource和UnpooledDataSource 都有5個重載的構造方法。
轉載于:https://my.oschina.net/jiutianniao/blog/400388
總結
以上是生活随笔為你收集整理的Mybatis源码研究5:数据源的实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Axure快速原型教程02--创建页面和
- 下一篇: java你可能不知道的事(2)--堆和栈