您的位置:首页 > 其它

Mybatis源码研究5:数据源的实现

2014-11-19 21:00 351 查看
一、数据源概述

数据源相关核心类位于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个重载的构造方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: