思维导图

文章已收录Github精选,欢迎Star:https://github.com/yehongzhi/learningSummary
概述
Mybatis是一个比较主流的ORM框架,所以在日常工作中接触得很多。我比较喜欢看优秀框架的源码,因为能写出这种框架的作者肯定有其独特之处。如果能看懂源码的一些巧妙构思,一定是受益匪浅的。
所谓万事开头难,看源码也要找到切入的点。设计模式无疑是源码分析一个很好的切入点,废话不多说,那么我们就开始吧。
工厂模式
工厂模式属于创建型模式。工厂模式的作用是把创建对象的逻辑封装起来,提供一个接口给外部创建对象,降低类与类之间的耦合。
在Mybatis中,用到工厂模式主要在DataSourceFactory。这是一个负责创建DataSource数据源的工厂。DataSourceFactory是一个接口,有不同的子类实现,根据不同的配置,生成不同的DataSourceFactory实现类。类图如下:

接着我们看一下DataSourceFactory的源码:
1 | public interface DataSourceFactory { |
DataSourceFactory接口定义了两个抽象方法,怎么工作的呢,其实是跟dataSource标签的属性type有关。
1 | <environment id="development"> |
Mybatis内置的type有三种配置,分别是UNPOOLED,POOLED,JNDI。
UNPOOLED,这个数据源的实现只是每次被请求时打开和关闭连接。
POOLED,这种数据源的使用“池“的思想,避免了创建新的连接实例时所必需的初始化和认证时间。
JNDI,这个数据源的实现是为了能在如 EJB 或应用服务