Mybatis数据源技术解析

数据源的创建

数据源是一个比较复杂的对象,其创建过程复杂,对于Mybatis创建一个数据源,具体来讲有如下难点:
1.常见的数据源件组都实现了javax.sql.DataSource接口
2.Mybatis不但要能集成第三方组件,自身也得提供数据源的实现。
3.一般情况数据源初始化的参数较多,比较复杂。
在这里插入图片描述
DataSource:数据源接口,jdbc标准规范之一,定义了获取Connection的方法。
PooledDataSource:带连接池的数据源·,提高连接资源的复用性,避免频繁创建,关闭连接资源带来的开销。
UnPooledDataSource:不带连接池的数据源,获取连接的方式和手动通过jdbc获取连接的方式一样。
DataSourceFactory:工厂接口,自定义创建DataSource数据源的方法。
UnpooledDataSourceFactory:工厂接口的实现之一,用于创建不带连接池的数据源UnPooledDataSource。
PooledDataSourceFactory:工厂接口的实现类之一,用于创建 PooledDataSource(带连接池的数据源);

数据库连接池技术解析

数据库连接池技术是提升数据库访问效率的一种手段,使用连接池可提高连接资源的复用性,避免频繁创建,关闭连接资源带来的开销。MyBatis内部的连接池实现类,接下来分析和连接池相关的类:
PooledDataSource:一个线程安全的数据库连接池。
PooledConnection:使用动态代理封装了真正的数据库连接对象,在连接使用之前和关闭时进行增强;
PoolState:用于管理PooledConnection对象状态的组件,通过两个 list 分别管理空闲状态的连接资源和活跃状态的连接资源。因为使用的list容器,可能会有并发安全的问题,所以使用时需要加上同步锁。
参考代码org.apache.ibatis.datasource.pooled.PooledDataSource.popConnection,获取连接的流程如下图,
在这里插入图片描述
参考代码org.apache.ibatis.datasource.pooled.PooledDataSource.pushConnection,回收连接资源的流程如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值