MyBatis中常用设计模式(面试重点)
MyBatis中使用的设计模式(面试重点)
MyBatis 框架在设计和实现过程中广泛使用了多种设计模式,这里列举一些关键的设计模式及其在 MyBatis 中的应用:
-
Builder模式:
SqlSessionFactoryBuilder,用于根据配置信息构建SqlSessionFactory实例。XMLConfigBuilderXMLMapperBuilderXMLStatementBuilderCacheBuilder类用于构建 Cache 对象。
-
工厂模式:
SqlSessionFactory类充当了工厂的角色,用来创建SqlSession对象。ObjectFactory用于创建实体类实例。MapperProxyFactory用于生成 Mapper 接口的动态代理实例。
-
单例模式:
ErrorContext和LogFactory等类实现单例模式,保证系统中只有一个实例。
-
代理模式:
- Mybatis实现的核心,在
MapperProxy类上,它实现了 JDK 动态代理机制,为开发者调用的 Mapper 接口生成代理对象,实现在背后执行 SQL 语句的功能。 ConnectionLogger类也是代理模式的运用,它代理了java.sql.Connection,在执行 SQL 时添加日志记录功能。- 还有executor.loader包使用了cglib或者javassist达到延迟加载的效果;
- Mybatis实现的核心,在
-
组合模式:
SqlNode及其子类(如ChooseSqlNode、TrimSqlNode等)构成了组合模式,用于动态拼接 SQL 语句片段。
-
模板方法模式:
BaseExecutor抽象类定义了执行 SQL 的基本流程(模板),其子类如SimpleExecutor、ReuseExecutor等则针对具体执行策略进行了扩展。
1、SimpleExecutor: 默认的 Executor,每个 SQL 执行时都会创建新的 Statement
2、ResuseExecutor: 相同的 SQL 会复用 Statement
3、BatchExecutor: 用于批处理的 Executor
4、CachingExecutor: 可缓存数据的 Executor,用代理模式包装了其它类型的 Executor
5、CachingExecutor为二级缓存执行器,BaseExecutor为一级缓存执行器。 -
适配器模式:
- MyBatis 的
Log接口和其各种实现(如Slf4jImpl、CommonsLoggingImpl等)体现了适配器模式,它们对接不同的日志框架,统一了日志输出方式。
- MyBatis 的
-
装饰者模式:
- MyBatis 的缓存包中,通过装饰者模式实现缓存的扩展功能,如
LoggingCacheDecorator、ScheduledCacheRefresher等,它们增强了基础缓存的功能。
- MyBatis 的缓存包中,通过装饰者模式实现缓存的扩展功能,如
-
迭代器模式:
PropertyTokenizer类在处理属性表达式时,起到了类似迭代器的作用,用于遍历和解析嵌套属性路径。
-
责任链模式:
- MyBatis 的拦截器(Interceptor)体系,通过责任链模式串联起来,拦截器链中的每个拦截器都能依次对执行 SQL 的请求进行处理。

浙公网安备 33010602011771号