【Mybatis中的五鼠闹东京】

北宋仁宗时期,江湖上有著名的三侠五义,其中五义又称五鼠:钻天鼠卢方、彻地鼠韩彰、穿山鼠徐庆、翻江鼠蒋平、锦毛鼠白玉堂,

“三侠”是指北侠欧阳春、南侠展昭、丁氏双侠丁兆兰、丁兆蕙二人为一侠;“五义”是指钻天鼠卢方、彻地鼠韩彰、钻山鼠徐庆,翻江鼠蒋平,锦毛鼠白玉堂这五鼠弟兄。

一、Mybatis中的五鼠介绍

SqlSession对数据库的操作,将委托给执行器Executor来完成,而Executor由五鼠组成,分别是:

简单鼠SimpleExecutor、

重用鼠ReuseExecutor、

批量鼠BatchExecutor、

缓存鼠CachingExecutor、

无用鼠ClosedExecutor。

二、五鼠族谱如下:



 

五鼠都有哪些本领,能闹得起东京。

三、五鼠本领 -->八仙过海各显神通

1、简单鼠SimpleExecutor:每执行一次update或select,就开启一个Statement对象,用完立刻关闭Statement对象。(可以是Statement或PrepareStatement对象)

2、重用鼠ReuseExecutor:执行update或select,以sql作为key查找Statement对象,存在就使用,不存在就创建,用完后,不关闭Statement对象,而是放置于Map<String, Statement>内,供下一次使用。(可以是Statement或PrepareStatement对象)

3、批量鼠BatchExecutor:执行update(没有select,JDBC批处理不支持select),将所有sql都添加到批处理中(addBatch()),等待统一执行(executeBatch()),它缓存了多个Statement对象,每个Statement对象都是addBatch()完毕后,等待逐一执行executeBatch()批处理的;BatchExecutor相当于维护了多个桶,每个桶里都装了很多属于自己的SQL,就像苹果蓝里装了很多苹果,番茄蓝里装了很多番茄,最后,再统一倒进仓库。(可以是Statement或PrepareStatement对象)

4、缓存鼠CachingExecutor:装饰设计模式典范,先从缓存中获取查询结果,存在就返回,不存在,再委托给Executor delegate去数据库取,delegate可以是上面任一的SimpleExecutor、ReuseExecutor、BatchExecutor。

5、无用鼠ClosedExecutor:毫无用处,读者可自行查看其源码,仅作为一种标识,和Serializable标记接口作用相当。

作用范围:以上这五鼠的作用范围,都严格限制在SqlSession生命周期范围内。

四、Mybatis中的设计模式介绍

Mybatis至少遇到了以下的设计模式的使用:

1)Builder模式,例如SqlSessionFactoryBuilder、XMLConfigBuilder、XMLMapperBuilder、XMLStatementBuilder、CacheBuilder;

2)工厂模式,例如SqlSessionFactory、ObjectFactory、MapperProxyFactory;

3)单例模式,例如ErrorContext和LogFactory;

4)代理模式,Mybatis实现的核心,比如MapperProxy、ConnectionLogger,用的jdk的动态代理;还有executor.loader包使用了cglib或者javassist达到延迟加载的效果;

5)组合模式,例如SqlNode和各个子类ChooseSqlNode等;

6)模板方法模式,例如BaseExecutor和SimpleExecutor,还有BaseTypeHandler和所有的子类例如IntegerTypeHandler;

7)适配器模式,例如Log的Mybatis接口和它对jdbc、log4j等各种日志框架的适配实现;

8)装饰者模式,例如Cache包中的cache.decorators子包中等各个装饰者的实现;

9)迭代器模式,例如迭代器模式PropertyTokenizer;

猜你喜欢

转载自gaojingsong.iteye.com/blog/2366730