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包中的类。
值得注意的是:
- 以上框架中的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详解相关推荐
- Java操作数据库方式二DBCP使用详解
##概述 DBCP的全称是:DataBase connection pool,翻译是:数据库连接池. 在Java操作数据库方式一JDBC使用详解中说到直接使用JDBC非常消耗资源.为了避免频繁关闭链接 ...
- Java操作数据库方式五MyBatis使用入门
##概述 ##MyBatis是什么 MyBatis是一个持久层框架,作用是在java项目中操作数据库. ##MyBatis介绍 MyBatis 本是apache的一个开源项目iBatis, 2010年 ...
- java内部类实现方式_Java内部类详解
一 内部类是什么 Java类中不仅可以定义变量和方法,还可以定义类,这样定义在类内部的类就被称为内部类.根据定义的方式不同,内部类分为静态内部类,成员内部类,局部内部类,匿名内部类四种. Java为什 ...
- mongodb java查询_java操作mongoDB查询的实例详解
java操作mongo查询的实例详解 前言: MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库 ...
- java 文件下载详解_Java 从网上下载文件的几种方式实例代码详解
废话不多说了,直接给大家贴代码了,具体代码如下所示: package com.github.pandafang.tool; import java.io.BufferedOutputStream; i ...
- idea 执行java maven,IDEA的run maven方式启动步骤详解
安装jetty插件 1. 找到Plugins,查找jetty插件,安装"IDEA Jetty Runner",安装好后重启IDEA 安装插件:Maven Helper 方法同Jet ...
- 一文快速回顾 Java 操作数据库的方式-JDBC
前言 数据库的重要性不言而喻,不管是什么系统,什么应用软件,也不管它们是 Windows 上的应用程序,还是 Web 应用程序,存储(持久化)和查询(检索)数据都是核心的功能. 大家学习数据库时,比如 ...
- 2016年 第07届 蓝桥杯 Java B组 决赛真题详解及小结
蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...
- 2018年 第09届 蓝桥杯 Java B组 决赛真题详解及小结
蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...
最新文章
- 七天入门linux,RHCE认证学习笔记-第七天
- 实例介绍Cocos2d-x开关菜单
- Ardino基础教程 21_LCD1602液晶屏
- 谋定国家5G战略的基石-工信部韦乐平:经信研究网络领先
- C#IList 取区间数据
- Mac平台下安装与配置MySQL
- 线性回归算法数学原理_线性回归算法-非数学家的高级数学
- 《解剖PetShop》系列之三
- 企业实战_01_ Mycat 主要作用_01
- 重置gitlab管理员密码
- Java项目实战教程分享
- 22条最常用Python代码,快收藏
- NLTK(自然语言工具包)
- oracle去除字段值的所有英文
- 什么是列联表分析(Contingency table analysis)?
- 高端存储“四十不惑”
- C语言零基础——简单门票费程序
- github配置SSH keys
- 国家一级建造师—工程经济—第一章—第四节
- IKEv2协议报文分片处理