五(补充二)MyBatis中执行器Executor框架
在五、仿MyBatis自定义的持久层如何添加增删查改功能中,自定义了一个Executor,实现具体执行sql语句。MyBatis实际就是提供了一套Executor框架——但是比自定义的Executor复杂,具体如下图:
其为Mybatis提供与数据库交互的功能,是一个典型的装饰器模式(参考一、装饰器模式,自己实现自己的同时自己是自己的一个属性)的应用——对JDBC功能的封装,同时对其接口的扩展提供了其他加强的功能,比如缓存参考MyBatis功能点之一(1):MyBatis缓存初体验。
首先分析MyBatis在何处使用?显然在sqlsession中。如下UML图:
通过阅读源码,可以证实:
这个Executor,SqlSessionFactory是怎么生成它的呢,即如何实现的?从DefaultSqlSessionFactory源码可知,其openSession时根据configuration对象中的executorType或自定义赋值生成:
那么只需要确定configuration中executorType即可。Configuration类中默认使用CachingExecutor,如下列图示例:
如上图示,同样能看到之前体验过的责任链(参考三、责任链模式,自己set自己是哪个handler)拦截器在Executor实例化时应用。当核心配置文件中有如下配置时,使用非CachingExecutor。