首页 » 技术分享 » Java操作数据库方式(六)DataSource详解

Java操作数据库方式(六)DataSource详解

 
文章目录

##概述

在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包中的类。

值得注意的是:

  1. 以上框架中的DataSource虽然类不同,但可以混合使用,即在MyBatis框架中可以使用DBCP中的DataSource类,也可以使用Druid框架中的DataSource类。
  2. Druid并不是一个独立操作数据库的框架,它只提供了DataSource,必须与其他框架配合使用。
  3. 只所以这些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详解,转载请注明来源!

0