mybatis中的连接池

mybatis中的连接池

1.在Mybatis中也有连接池技术,但是它采用的是自己的连接池技术。在Mybatis的SqlMapConfig.xml配置文件中,通过<dataSource type=” POOLED”>来实现Mybatis中连接池的配置。

2.连接池的分类
在Mybatis中我们将它的数据源dataSource分为以下几类:
在这里插入图片描述
可以看出Mybatis将它自己的数据源分为三类:
UNPOOLED 不使用连接池的数据源
POOLED 使用连接池的数据源
JNDI 使用JNDI实现的数据源
具体结构如下:
在这里插入图片描述
相应地,MyBatis内部分别定义了实现了java.sql.DataSource接口的UnpooledDataSource,PooledDataSource类来表示UNPOOLED、POOLED类型的数据源。
在这三种数据源中,我们一般采用的是POOLED数据源(很多时候我们所说的数据源就是为了更好的管理数据库连接,也就是我们所说的连接池技术)。

3.Mybatis中的数据源配置
在这里插入图片描述
MyBatis在初始化时,解析此文件,根据的type属性来创建相应类型的的数据源DataSource,即:
type=”POOLED”:MyBatis会创建PooledDataSource实例
type=”UNPOOLED” : MyBatis会创建UnpooledDataSource实例
type=”JNDI”:MyBatis会从JNDI服务上查找DataSource实例,然后返回使用

4.Mybatis中DataSource的存取
MyBatis是通过工厂模式来创建数据源DataSource对象的,MyBatis定义了抽象的工厂接口:org.apache.ibatis.datasource.DataSourceFactory,通过其getDataSource()方法返回数据源DataSource。
下面是DataSourceFactory源码,具体如下:
在这里插入图片描述
MyBatis创建了DataSource实例后,会将其放到Configuration对象内的Environment对象中, 供以后使用。
具体分析过程如下:
先进入XMLConfigBuilder类中,可以找到如下代码:
在这里插入图片描述
分析configuration对象的environment属性,结果如下:
在这里插入图片描述
5.Mybatis中连接的获取过程分析
当我们需要创建􀀁SqlSession 对象并需要执行SQL 语句时,这时候MyBatis 才会去调用dataSource 对象来创建java.sql.Connection 对象。也就是说,java.sql.Connection 对象的创建一直延迟到执行SQL 语句的时候。
在这里插入图片描述
前4句都不会导致java.sql.Connection对象的创建,只有当第5 句sqlSession.selectList(“test.queryUserList”),才会触发MyBatis 在底层执行下面这个方法来创建java.sql.Connection 对象。 如何证明它的加载过程呢? 我们可以通过断点调试,在PooledDataSource 中找到如下popConnection()方法,如下所示:
在这里插入图片描述
下面是连接获取的源代码:
在这里插入图片描述
最后我们可以发现,真正连接打开的时间点,只是在我们执行SQL语句时,才会进行。其实这样做我们也可以进一步发现,数据库连接是我们最为宝贵的资源,只有在要用到的时候,才去获取并打开连接,当我们用完了就再立即将数据库连接归还到连接池中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值