1、Mybatis 连接池的分类
Mybatis 将它自己的数据源分为三类:
- UNPOOLED 不使用连接池的数据源
- POOLED 使用连接池的数据源
- JNDI 使用 JNDI 实现的数据源
2、Mybatis 中数据源的配置
我们的数据源配置就是在 SqlMapConfig.xml 文件中,具体配置如下:
<!-- 配置数据源(连接池)信息 -->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
MyBatis 在初始化时,根据的 type 属性来创建相应类型的的数据源 DataSource,即:
- type=”POOLED”:MyBatis 会创建 PooledDataSource 实例
- type=UNPOOLED” :MyBatis 会创建 UnpooledDataSource 实例
- type=”JNDI”:MyBatis 会从 JNDI 服务上查找DataSource 实例,然后返回使用
3、POOLED连接池的连接获取
在mybatis中只有当我们需要创建 SqlSession 对象并需要执行 SQL语句时,这时候 MyBatis 才会去调用dataSource 对象来创建java.sql.Connection对象。也就是说,java.sql.Connection对象的创建一直延迟到执行SQL语句的时候。
连接池由两部分组成、空闲池和活动池。
- 当空闲池有连接时直接从连接池里拿一个连接,用完后会放回空闲池。
- 当空闲池没有连接时,如果活动池里面的连接数还没有达到最大时,那么会创建一个新的连接放入活动连接池中。
- 当空闲池没有了连接,并且活动池里面的连接数已达到最大时,会在活动池中找最先进来的连接用。