抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

思维导图

文章已收录Github精选,欢迎Starhttps://github.com/yehongzhi/learningSummary

概述

Mybatis是一个比较主流的ORM框架,所以在日常工作中接触得很多。我比较喜欢看优秀框架的源码,因为能写出这种框架的作者肯定有其独特之处。如果能看懂源码的一些巧妙构思,一定是受益匪浅的。

所谓万事开头难,看源码也要找到切入的点。设计模式无疑是源码分析一个很好的切入点,废话不多说,那么我们就开始吧。

工厂模式

工厂模式属于创建型模式。工厂模式的作用是把创建对象的逻辑封装起来,提供一个接口给外部创建对象,降低类与类之间的耦合。

在Mybatis中,用到工厂模式主要在DataSourceFactory。这是一个负责创建DataSource数据源的工厂。DataSourceFactory是一个接口,有不同的子类实现,根据不同的配置,生成不同的DataSourceFactory实现类。类图如下:

接着我们看一下DataSourceFactory的源码:

1
2
3
4
5
6
7
public interface DataSourceFactory {

void setProperties(Properties props);

DataSource getDataSource();

}

DataSourceFactory接口定义了两个抽象方法,怎么工作的呢,其实是跟dataSource标签的属性type有关。

1
2
3
4
5
6
7
8
9
10
<environment id="development">
<transactionManager type="JDBC"/>
<!-- type属性是关键属性 -->
<dataSource type="POOLED">
<property name="driver" value="${dataSource.driver}"/>
<property name="url" value="${dataSource.url}"/>
<property name="username" value="${dataSource.username}"/>
<property name="password" value="${dataSource.password}"/>
</dataSource>
</environment>

Mybatis内置的type有三种配置,分别是UNPOOLED,POOLED,JNDI。

UNPOOLED,这个数据源的实现只是每次被请求时打开和关闭连接。

POOLED,这种数据源的使用“池“的思想,避免了创建新的连接实例时所必需的初始化和认证时间。

JNDI,这个数据源的实现是为了能在如 EJB 或应用服务