Mybatis 的连接池技术
2020-06-01 16:05:02来源:博客园 阅读 ()
Mybatis 的连接池技术
在 Mybatis 的 SqlMapConfig.xml 配置文件中,通过<dataSource type=”pooled”>来实现 Mybatis 中连接池的配置。 一、Mybatis连接池的分类 在Mybatis中,我们将他的数据源dataSource分为以下几类:
可以看出Mybatis将数据源分为三类
UNPOOLED 不使用连接池的数据源
POOLED 使用连接池的数据源
JNDI 使用JNDI实现的数据源
具体结构如下:
相应的,Mybatis内部分别定义实现了java.sql.DataSource接口的UnPooledDataSource,PooledDataSource类来标识两种类型的数据源
在这三种数据源中,我们一般采用的是Pooled数据源,很多时候我们所说的数据源就是为了更好的管理数据库连接,也就是我们所说的连接池技术
二、Mybatis中数据源的配置
我们的数据源配置就是在SqlMapConfigxml文件中,具体配置如下:
<!-- 配置数据源(连接池)信息 --> <dataSource type="POOLED">MyBatis 在初始化时,根据<dataSource>的 type 属性来创建相应类型的的数据源 DataSource,即: type=”POOLED”:MyBatis 会创建 PooledDataSource 实例 type=”UNPOOLED” : MyBatis 会创建 UnpooledDataSource 实例 type=”JNDI”:MyBatis 会从 JNDI 服务上查找 DataSource 实例,然后返回使用 三、Mybatis中DataSource的存取 MyBatis 是 通 过 工 厂 模 式 来 创 建 数 据 源 DataSource 对 象 的 , MyBatis 定 义 了 抽 象 的 工 厂 接 口:org.apache.ibatis.datasource.DataSourceFactory,通过其 getDataSource()方法返回数据源 DataSource。 下面是 DataSourceFactory 源码,具体如下:
<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>
package org.apache.ibatis.datasource; import java.util.Properties; import javax.sql.DataSource; /** * @author */ public interface DataSourceFactory { void setProperties(Properties props); DataSource getDataSource(); }MyBatis 创建了 DataSource 实例后,会将其放到 Configuration 对象内的 Environment 对象中, 供 以后使用。 具体分析过程如下: 1.先进入 XMLConfigBuilder 类中,可以找到如下代码:
2.分析 configuration 对象的 environment 属性,结果如下:
四、Mybatis中链接的获取过程分析
当我们需要创建 SqlSession 对象并需要执行 SQL 语句时,这时候 MyBatis 才会去调用 dataSource 对象 来创建java.sql.Connection对象。也就是说,java.sql.Connection对象的创建一直延迟到执行SQL语句 的时候。@Test public void testSql() throws Exception { InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml"); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in); SqlSession sqlSession = factory.openSession(); List<User> list = sqlSession.selectList("findUserById",41); System.out.println(list.size()); }只有当第 4 句 sqlSession.selectList("findUserById"),才会触发 MyBatis 在底层执行下面这个方 法来创建 java.sql.Connection 对象。 如何证明它的加载过程呢? 我们可以通过断点调试,在 PooledDataSource 中找到如下 popConnection()方法,如下所示:
下面是连接获取的源代码:
最后我们可以发现,真正连接打开的时间点,只是在我们执行SQL语句时,才会进行。其实这样做我们也可以 进一步发现,数据库连接是我们最为宝贵的资源,只有在要用到的时候,才去获取并打开连接,当我们用完了就再 立即将数据库连接归还到连接池中
原文链接:https://www.cnblogs.com/mingqi-420/p/13025143.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- MyBatis中的$和#,用不好,准备走人! 2020-06-11
- jdk各个版本下载 2020-06-11
- SpringBoot 2.3 整合最新版 ShardingJdbc + Druid + MyBatis 2020-06-11
- 我被炒鱿鱼了 2020-06-06
- 天哪!手动编写mybatis雏形竟然这么简单 2020-06-06
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash