##概述
在java世界里操作数据库有很多方式,在众多方式中除了JDBC外都有DataSource对象。
DataSource可以看作数据源,它封装了数据库参数,连接数据库,程序中操作DataSource对象即可对数据库进行增删改查操作。
不同方式中使用的DataSource对象不同。列举如下:
1,DBCP框架
dbcp框架中的DataSource类是:org.apache.commons.dbcp.BasicDataSource
这是commons-dbcp.jar包中的类。
2,C3P0框架
c3p0框架的DataSource类是:com.mchange.v2.c3p0.ComboPooledDataSource
这是c3p0.jar包中的类。
3,MyBatis框架
MyBatis框架的DataSource类是:org.apache.ibatis.datasource.pooled.PooledDataSource
这是mybatis.jar包中的类。
4,Druid框架
Druid框架的DataSource类是:com.alibaba.druid.pool.DruidDataSource
这是druid.jar包中的类。
值得注意的是:
- 以上框架中的DataSource虽然类不同,但可以混合使用,即在MyBatis框架中可以使用DBCP中的DataSource类,也可以使用Druid框架中的DataSource类。
- Druid并不是一个独立操作数据库的框架,它只提供了DataSource,必须与其他框架配合使用。
- 只所以这些DataSource对象可以通用,是因为他们都实现了同一个接口:javax.sql.DataSource。实现DataSource接口即必须重新getConnection方法,即可以获得Connection对象,有了Connection对象即可以对数据库操作。
下面分别对不同框架的DataSource类及工作原理做详细讲解。
##DBCP框架的BasicDataSource
一,使用
DBCP框架的具体使用参见:Java操作数据库方式二DBCP使用详解
二,源码分析
由于篇幅有限,对源码不做详细分析,只分析使用BasicDataSource操作数据库的流程。
下面以查询方法为例说明。
查询调用的是QueryRunner类的query方法。首先是创建QueryRunner对象,代码如下:
QueryRunner queryRunner = new QueryRunner(dataSource);
此时把DataSource对象传递给了QueryRunner对象,此时可以接收DataSource接口的任意实现类对象。
QueryRunner类的query方法源码如下:
public <T> T query(String sql, ResultSetHandler<T> rsh, Object... params) throws SQLException {
Connection conn = this.prepareConnection();
return this.query(conn, true, sql, rsh, params);
}
这里面首先通过prepareConnecton()方法获取connection对象,方法的源码如下:
protected Connection prepareConnection() throws SQLException {
if (this.getDataSource() == null) {
throw new SQLException("QueryRunner requires a DataSource to be invoked in this way, or a Connection should be passed in");
} else {
return this.getDataSource().getConnection();
}
}
三,总结
从上面的源码中我们会发现,对于QueryRunner来说,DataSource是哪个实现类并不重要,重要的是得到Connection对象,有了Connection对象就可以继续下面的操作。这也是不同框架中的DataSource对象可以互相使用的原因,更是java中面向接口编程的强大优势。
##C3P0框架的ComboPooledDataSource
一,使用
在spring-data-jpa框架中使用的是ComboPooledDataSource,具体参见:Java操作数据库方式四Spring data jpa的使用
二,源码分析
三,总结
##MyBatis框架的PooledDataSource
一,使用
二,源码分析
三,总结
##Druid框架的DruidDataSource
一,使用
二,源码分析
三,总结
##不同DataSource对象优缺点对比分析
##总结
未完待续。。。
转载自原文链接, 如需删除请联系管理员。
原文链接:Java操作数据库方式(六)DataSource详解,转载请注明来源!