【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;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值