MyBatis源码解析(四)——DataSource数据源模块

原创作品,可以转载,但是要标注出处地址:http://www.cnblogs.com/V1haoge/p/6634880.html

1、回顾

  上同一柔和遭遇解读了MyBatis中之作业模块,其实事务操作就就是是付诸和回滚。整个事情模块采用了抽象工厂模式开展统筹,将切实的政工实例的变迁对使用方隐藏,使用工厂被提供的养法来博取。

  事务模块分为两看似:JDBC类型和MANAGED类型,前者多用于单独使用MyBatis框架的状下(比如测试学习MyBatis功能),后者则表示托管给其它框架,比如Spring来就工作功能。

  这同一掉我们来探视环境设置中之另外一样桩内容:数据源DataSource。

  (其实应该先解读DataSource,在解读Transaction的,但是…失误啊…)

2、数据源模块

  数据源模块位于org.apache.ibatis.datasource包下,其架构结构吧:

org.apache.ibatis.datasource
----org.apache.ibatis.datasource.jndi
--------JndiDataSourceFactory.java
----org.apache.ibatis.datasource.pooled
--------PooledConnection.java
--------PooledDataSource.java
--------PooledDataSourceFactory.java
--------PoolState.java
----org.apache.ibatis.datasource.unpooled
--------UnpooledDataSource.java
--------UnpooledDataSourceFactory.java
----DataSourceException.java
----DataSourceFactory.java

  和业务模块类似,数据源模块同样用了工厂模式。

2.1 数据源接口

  org.apache.ibatis.datasource包下的DataSourceFactory是数据源工厂接口,至于数据源接口沿用JDK中让来底javax.sql包下之数码源接口DataSource,下面被出JDK中DataSource接口的源码:

1 package javax.sql;
2 import java.sql.Connection;
3 import java.sql.SQLException;
4 import java.sql.Wrapper;
5 public interface DataSource  extends CommonDataSource,Wrapper {
6   Connection getConnection() throws SQLException;
7   Connection getConnection(String username, String password)
8     throws SQLException;
9 }

  从源码中可以看出,在数据源接口中定义了有限独获取数据库连接Connection的方,可见数据源的目的所在,不论其下啊规律实现,其目的就是是为对外提供数据库连接的拿走接口。我们千方百计创造数据源实例,就是啊外方通过getConnection()方法来获取数据库连接做基础准备工作。下面看数据源工厂接口源码:

  数据源工厂接口源码:

 1 package org.apache.ibatis.datasource;
 2 import java.util.Properties;
 3 import javax.sql.DataSource;
 4 /**
 5  * 数据源工厂
 6  * 有三种内建的数据源类型 UNPOOLED POOLED JNDI
 7  */
 8 public interface DataSourceFactory {
 9   //设置属性,被XMLConfigBuilder所调用
10   void setProperties(Properties props);
11   //生产数据源,直接得到javax.sql.DataSource
12   DataSource getDataSource();
13 } 

  数据源工厂接口中定义了简单单法子,一个凡是设置属性的方,与业务型中之安属性方法类似,也是需要在构建Configuration配置类时由XMLConfigBuilder来进行调用的,调用的目的是以拿配备文件中配置的数量源属性信息填写充到DataSource中(然后以填充到Environment中,在填写到Configuration中,这是后话)。

  这些Properties属性配置正是第二节约列举了之Configuration配置文件被的如出一辙组成部分:

1 <dataSource type="POOLED">
2     <property name="driver" value="com.mysql.jdbc.Driver"/>
3     <property name="url" value="jdbc:mysql://localhost:3306/mbtest"/>
4     <property name="username" value="root"/>
5     <property name="password" value="123456"/>
6 </dataSource>

  这同一段落配置内容遭<dataSource>标签标明这是数据源的配备信息,type属性表示这数据源是POOLED(池型)类型的数据源,然后在其里面设置property子标签用于指定数据源的切实信息:驱动器、数据库URL、用户称、密码四桩内容。

  另一个方法是DataSource实例的养方,这为是工厂的首要意图:用来养对应类的实例。

  这里插播一条信息:Connection与DataSource的关系,Connection(连接)是带有在DataSource(数据源)之内的,我们好透过DataSource来抱里的Connection,反的无容许,所以我们需要先创造DataSource实例,以这来获得Connection数据库连接,所有DataSource是基础,Connection是目的。

2.2 Mybatis数据源类型

  MyBatis为咱提供了三种植具体的数据源类型:

    unpooled:非池型数据源

    pooled:池型数据源MyBatis

    jndi:托管型

  MyBatis提供的老三种植多少源类型各发生意图,其中非池型数据源是作为基础在的,一般也非会见一直下,常用的时池型数据源,而池型数据源是盖非池型数据源为底蕴之,第三栽托管型数据源的意思就是是使用外部的数据源。

  有关这三栽数据源的源码解析详见下同样温情。

  

 

网站地图xml地图