MyBatis中常用设计模式(面试重点)
MyBatis中使用的设计模式(面试重点)
MyBatis 框架在设计和实现过程中广泛使用了多种设计模式,这里列举一些关键的设计模式及其在 MyBatis 中的应用:
-
Builder模式:
SqlSessionFactoryBuilder
,用于根据配置信息构建SqlSessionFactory
实例。XMLConfigBuilder
XMLMapperBuilder
XMLStatementBuilder
CacheBuilder
类用于构建 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 的请求进行处理。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!