MyBatis 源码分析 - 内置数据源,java项目技术架构图

本文深入探讨了MyBatis内置的UNPOOLED和POOLED数据源,分析了数据源的配置与初始化过程,包括UnpooledDataSource和PooledDataSource的实现逻辑。通过对数据源源码的解析,展示了如何初始化数据库驱动和获取连接,并介绍了辅助类PoolState和PooledConnection在连接池中的作用。
摘要由CSDN通过智能技术生成

| 1 | MyBatis 源码分析 - MyBatis入门 | https://thinkwon.blog.csdn.net/article/details/114808852 |

| 2 | MyBatis 源码分析 - 配置文件解析过程 | https://thinkwon.blog.csdn.net/article/details/114808962 |

| 3 | MyBatis 源码分析 - 映射文件解析过程 | https://thinkwon.blog.csdn.net/article/details/115423167 |

| 4 | MyBatis 源码分析 - SQL 的执行过程 | https://thinkwon.blog.csdn.net/article/details/115603376 |

| 5 | MyBatis 源码分析 - 内置数据源 | https://thinkwon.blog.csdn.net/article/details/116331419 |

| 6 | MyBatis 源码分析 - 缓存原理 | https://thinkwon.blog.csdn.net/article/details/116809942 |

| 7 | MyBatis 源码分析 - 插件机制 | https://thinkwon.blog.csdn.net/article/details/116809961 |

1.简介


本篇文章将向大家介绍 MyBatis 内置数据源的实现逻辑。搞懂这些数据源的实现,可使大家对数据源有更深入的认识。同时在配置这些数据源时,也会更清楚每种属性的意义和用途。因此,如果大家想知其然,也知其所以然。那么接下来就让我们一起去探索 MyBatis 内置数据源的源码吧。

MyBatis 支持三种数据源配置,分别为 UNPOOLED、POOLED 和 JNDI。并提供了两种数据源实现,分别是 UnpooledDataSource 和 PooledDataSource。在三种数据源配置中,UNPOOLED 和 POOLED 是我们最常用的两种配置。至于 JNDI,MyBatis 提供这种数据源的目的是为了让其能够运行在 EJB 或应用服务器等容器中,这一点官方文档中有所说明。由于 JNDI 数据源在日常开发中使用甚少,因此,本篇文章不打算分析 JNDI 数据源相关实现。大家若有兴趣,可自行分析。接下来,本文将重点分析 UNPOOLED 和 POOLED 两种数据源。其他的就不多说了,进入正题吧。

2.内置数据源初始化过程


在详细分析 UnpooledDataSource 和 PooledDataSource 两种数据源实现之前,我们先来了解一下数据源的配置与初始化过程。现在看数据源是如何配置的,如下:

数据源的配置是内嵌在 节点中的,MyBatis 在解析 节点时,会一并解析数据源的配置。MyBatis 会根据具体的配置信息,为不同的数据源创建相应工厂类,通过工厂类即可创建数据源实例。关于数据源配置的解析以及数据源工厂类的创建过程,我在 MyBatis 配置文件解析过程一文中分析过,这里就不赘述了。下面我们来看一下数据源工厂类的实现逻辑。

public class UnpooledDataSourceFactory implements DataSourceFactory {

private static final String DRIVER_PROPERTY_PREFIX = “driver.”;

private static final int DRIVER_PROPERTY_PREFIX_LENGTH = DRIVER_PROPERTY_PREFIX.length();

protected DataSource dataSource;

public UnpooledDataSourceFactory() {

// 创建 UnpooledDataSource 对象

this.dataSource = new UnpooledDataSource();

}

@Override

public void setProperties(Properties properties) {

Properties driverProperties = new Properties();

// 为 dataSource 创建元信息对象

MetaObject metaDataSource = SystemMetaObject.forObject(dataSource);

// 遍历 properties 键列表,properties 由配置文件解析器传入

for (Object key : properties.keySet()) {

String propertyName = (String) key;

// 检测 propertyName 是否以 “driver.” 开头

if (propertyName.startsWith(DRIVER_PROPERTY_PREFIX)) {

String value = properties.getProperty(propertyName);

// 存储配置信息到 driverProperties 中

drive

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值