Mybatis深入之DataSource实例化过程

Mybatis深入之DataSource实例化过程

简介

主要介绍Mybatis启动过程中DataSource实例化的过程、为后面解析一个完整SQL执行过程做个前章。

Mybatis中DataSource体系

MybatisDataSource整体简介

Mybatis中关于数据库的类都在org.apache.ibatis.datasource包中
DataSource体系

Mybatis配置文件中关于数据库的配置:

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driverClassName}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
  • 重点关注<dataSource type="POOLED">的type属性、其有三种取值:
    • POOLED:使用Mybatis自带的数据库连接池来管理数据库连接
    • UNPOOLED:不使用任何数据库连接池来管理数据库连接
    • JNDI:jndi形式使用数据库连接、主要用于项目正常使用的时候

类与类之间的关系:
这里写图片描述
每一条线都是一种关系、简单解释一下
1. PooledDataSource实现java.sql.DataSource接口
2. PooledDataSource内部持有一个DataSource引用
3. UnpooledDataSource实现java.sql.DataSource接口
4. PooledDataSource内部持有一个UnpooledDataSource引用
5.PooledDataSourceFactory无参构造方法体中将其父类UnpooledDataSourceFactory持有的引用DataSource实例化为PooledDataSource
6. PooledDataSourceFactory继承UnpooledDataSourceFactory
7. UnpooledDataSourceFactory无参构造方法将其持有的引用DataSource实例化为UnpooledDataSource
8. UnpooledDataSourceFactory持有一个DataSource引用、用于返回实例化好的DataSource。

Mybatis中DataSource实例化整体过程

这里以使用Mybatis自带的数据库连接池为例。也就是type为 “POOLED”类型的数据连接。

  1. 根据配置文件中type的类型实例化具体的DataSourceFactory。这里是POOLED所以实例化的是PooledDataSourceFactory。
  2. 通过PooledDataSourceFactory来获取DataSource具体实例:PooledDataSource

对于第一步更详细点的过程:

  • 在Mybatis初始化Configuration对象时、Configuration中属性TypeAliasRegistry同样被实例化、并且在Configuration的无参构造方法中对TypeAliasRegistry注册了许多常用的类(以键值对的形式保存在TypeAliasRegistry的属性private final Map<String, Class<?>> TYPE_ALIASES = new HashMap<String, Class<?>>();中、也包括TypeAliasRegistry无参构造方法注册的基本java类型。
  • 通过配置文件中type指定的”POOLED”在TypeAliasRegistry中查找其对应的类:PooledDataSourceFactory
  • 调用其newInstance()实例化
  • PooledDataSourceFactory继承自UnpooledDataSourceFactory、所以UnpooledDataSourceFactory先被实例化、
  • UnpooledDataSourceFactory无参构造方法中实例化了其DataSource引用为UnpooledDataSource。
  • 接着实例化PooledDataSourceFactory、其无参构造方法
  • 13
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值