mybatis开启log_Mybatis设计模式总结

本文详细介绍了Mybatis中使用的设计模式,包括Builder模式、单例模式、代理模式、组合模式、模板方法模式、适配器模式、装饰者模式和迭代器模式,并通过具体例子阐述了它们在Mybatis中的实现和作用。
摘要由CSDN通过智能技术生成

1e0b28be02d3dfab599dc3ee0dd27c22.png

我们都知道有26个设计模式,但是大多停留在概念层面,真实开发中很少遇到,最近在整理这方面的知识,所以也拿出来做个总结, Mybatis源 码中使用了大量的设计模式,阅读源码并观察设计模式在其中的应 用 ,能够更深入的理解设计模式。 Mybatis至少遇到了以下的设计模式的使用 :
  • Builder模式,例如SqlSessionFactoryBuilder、Environment;

  • 工厂方法模式,例如SqlSessionFactory、TransactionFactory、TransactionFactory、LogFactory、ObjectFactory、ReflectorFactory;

  • 单例模式,例如ErrorContext和LogFactory;

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

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

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

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

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

  • 迭代器模式,例如迭代器模式PropertyTokenizer;

接下来挨个模式进行解读,先介绍模式自身的知识,然后解读在Mybatis中怎样应用了该模式。

1、Builder模式(建造者模式)

Builder模式的定义是“将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。”,它属于创建类模式,一般来说,如果一个对象的构建比较复杂,超出了构造函数所能包含的范围,就可以使用工厂模式和Builder模式,相对于工厂模式会产出一个完整的产品,Builder应用于更加复杂的对象的构建,甚至只会构建产品的一个部分。

建造模式:https://blog.csdn.net/qq_35807136/article/details/79086248
SqlSessionFactoryBuilder类根据不同的输入参数来构建SqlSessionFactory这个工厂对象。

ed5edf809eafcb16a6f767b5d9ae656c.png

Environment通过静态内部类的方式构建了Environment对象 1c7e8321edc128045f6d11d19497d5f4.png
2、工厂模式

在Mybatis中比如SqlSessionFactory使用的是工厂模式,该工厂没有那么复杂的逻辑,是一个简单工厂模式。

简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

工厂模式:https://blog.csdn.net/qq_35807136/article/details/79908422
SqlSessionFactory根据不同得参数构建SqlSessionManager、和SqlSession两个对象:

92bc011768073cee3f6ec399feaf1d14.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值