专栏名称: 芋道源码
纯 Java 源码分享公众号,目前有「Dubbo」「SpringCloud」「Java 并发」「RocketMQ」「Sharding-JDBC」「MyCAT」「Elastic-Job」「SkyWalking」「Spring」等等
目录
相关文章推荐
芋道源码  ·  为什么 MyBatis 源码中,没有我那种 ... ·  16 小时前  
芋道源码  ·  面试官常拷打:如何下保证MySQL数据库与R ... ·  2 天前  
芋道源码  ·  盘点Lombok的几个骚操作 ·  2 天前  
51好读  ›  专栏  ›  芋道源码

为什么 MyBatis 源码中,没有我那种 if···else

芋道源码  · 公众号  · Java  · 2025-03-15 17:38

主要观点总结

文章介绍了加入一个知识星球,该星球提供包括项目实战、面试招聘、源码解析等内容。同时,文章梳理了MyBatis框架源码中使用的多种设计模式,包括工厂模式、单例模式、建造者模式、适配器模式、代理模式、组合模式、装饰器模式、模板模式、策略模式和迭代器模式等,并介绍了这些设计模式在MyBatis中的运用场景。

关键观点总结

关键观点1: 知识星球内容

提供包括项目实战、面试招聘、源码解析等内容,帮助提升技术能力。

关键观点2: MyBatis框架与设计模式

MyBatis源码中使用了多种设计模式,包括工厂模式、单例模式等,这些设计模式的巧妙使用是整个框架的精华。

关键观点3: 设计模式在MyBatis中的运用

详细介绍了各种设计模式在MyBatis中的场景介绍和同类场景,以及这些设计模式在解决复杂场景问题中的运用。

关键观点4: 加入方式

通过扫描二维码加入知识星球,欢迎加入。


正文

👉 这是一个或许对你有用 的社群

🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入 芋道快速开发平台 知识星球。 下面是星球提供的部分资料:

👉 这是一个或许对你有用的开源项目

国产 Star 破 10w+ 的开源项目,前端包括管理后台 + 微信小程序,后端支持单体和微服务架构。

功能涵盖 RBAC 权限、SaaS 多租户、数据权限、商城、支付、工作流、大屏报表、微信公众号、CRM 等等功能:

  • Boot 仓库:https://gitee.com/zhijiantianya/ruoyi-vue-pro
  • Cloud 仓库:https://gitee.com/zhijiantianya/yudao-cloud
  • 视频教程:https://doc.iocoder.cn
【国内首批】支持 JDK 21 + SpringBoot 3.2.2、JDK 8 + Spring Boot 2.7.18 双版本

来源:江南一点雨


在MyBatis的两万多行的框架源码中,使用了大量的设计模式对工程架构中的复杂场景进行解耦,这些设计模式的巧妙使用是整个框架的精华。

经过整理,大概有以下设计模式,如图1所示。

类型:创建型模式

工厂模式

SqlSessionFactory 的结构如图2所示。

工厂模式: 简单工厂是一种创建型模式,在父类中提供一个创建对象的方法,允许子类决定实例对象的类型。

场景介绍: SqlSessionFactory 是获取会话的工厂,每次使用MyBatis 操作数据库时, 都会开启一个新的会话。在会话工厂的实现中,SqlSessionFactory 负责获取数据源环境配置信息、构建事务工厂和创建操作SQL 的执行器,最终返回会话实现类。

同类设计: SqlSessionFactory、ObjectFactory、MapperProxyFactory 和DataSourceFactory。

单例模式

Configuration 单例配置类的结构如图3所示。

单例模式: 是一种创建型模式,能够保证一个类只有一个实例,并且提供一个访问该实例的全局节点。

场景介绍: Configuration 是一个大单例,贯穿整个会话周期,所有的配置对象(如映射、缓存、入参、出参、拦截器、注册机和对象工厂等)都在Configuration 配置项中初始化, 并且随着SqlSessionFactoryBuilder 构建阶段完成实例化操作。

同类场景: ErrorContext、LogFactory 和Configuration。

建造者模式

ResultMap 建造者模式的结构如图4所示。

建造者模式: 使用多个简单的对象一步一步地构建成一个复杂的对象,提供了一种创建对象的最佳方式。

场景介绍: 建造者模式在MyBatis 中使用了大量的XxxxBuilder,将XML 文件解析到各类对象的封装中,使用建造者及建造者助手完成对象的封装。它的核心目的是不希望把过多的关于对象的属性设置写到其他业务流程中,而是用建造者方式提供最佳的边界隔离。

同类场景: SqlSessionFactoryBuilder、XMLConfigBuilder、XMLMapperBuilder、XML StatementBuilder 和CacheBuilder。

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/ruoyi-vue-pro
  • 视频教程:https://doc.iocoder.cn/video/







请到「今天看啥」查看全文