当前位置: 首页 > article >正文

mybaties中使用的设计模式

一、创建型模式

工厂模式
应用场景:SqlSessionFactory 负责创建 SqlSession(数据库会话),通过不同参数生成不同配置的实例。例如,DefaultSqlSessionFactory 根据事务隔离级别、自动提交等参数构建会话对象。
实现方式:通过抽象工厂接口定义创建逻辑,子类实现具体对象的实例化。
单例模式
应用场景:Configuration 类作为全局配置中心,通过 getInstance() 方法确保唯一实例,避免重复加载配置。
其他示例:ErrorContext(错误上下文)和 LogFactory(日志工厂)也采用单例模式。
建造者模式
应用场景:SqlSessionFactoryBuilder 通过逐步解析 XML 配置(如 XMLConfigBuilder)构建复杂的 Configuration 对象,最终生成 SqlSessionFactory。
核心类:XMLMapperBuilder 和 XMLStatementBuilder 用于解析 SQL 映射文件并构建对象树。

二、结构型模式

代理模式
应用场景:Mapper 接口的代理实现,如 MapperProxy 使用 JDK 动态代理,将接口方法调用转发为 SQL 执行。
延迟加载:executor.loader 包通过 CGLIB 或 Javassist 实现延迟加载的代理对象。
组合模式
应用场景:动态 SQL 的 SqlNode 接口(如 IfSqlNode、TrimSqlNode)将 SQL 片段组合成树形结构,递归解析生成完整 SQL。
核心逻辑:apply() 方法统一处理单个节点与节点组合,支持条件判断、循环等复杂逻辑。
适配器模式
应用场景:日志模块适配不同日志框架(如 Log4j、SLF4J),通过 Log 接口统一调用,屏蔽底层差异。
实现类:Log4jImpl、Slf4jImpl 等适配器类实现日志接口。
装饰器模式
应用场景:缓存模块通过 Cache 接口的装饰器链(如 LruCache、ScheduledCache)动态添加缓存策略。
示例:TransactionalCache 装饰器为缓存添加事务支持。

三、行为型模式

模板方法模式
应用场景:BaseExecutor 定义 SQL 执行流程(如查询、提交事务),子类 SimpleExecutor 实现具体步骤(如 doQuery())。
扩展性:通过重写模板方法支持不同执行策略(如批量处理、复用 Statement)。
策略模式
应用场景:动态 SQL 的条件处理(如 IfSqlNode 根据参数值选择是否包含 SQL 片段)。
其他示例:TypeHandler 根据数据类型选择不同的处理策略。
迭代器模式
应用场景:PropertyTokenizer 解析属性表达式(如 user.address.street),按层级迭代访问属性。


http://www.kler.cn/a/578837.html

相关文章:

  • 介绍如何基于现有的可运行STGCN(Spatial-Temporal Graph Convolutional Network)模型代码进行交通流预测的改动
  • (每日一题) 力扣 283 移动零
  • 强化学习(赵世钰版)-学习笔记(4.值迭代与策略迭代)
  • 跟着 Lua 5.1 官方参考文档学习 Lua (12)
  • 浅谈流媒体协议以及视频编解码
  • C#中异步窗体的调用方法
  • sqlserver中的锁模式 | SQL SERVER如何开启MVCC(使用row-versioning)【启用行版本控制减少锁争用】
  • 如何基于LLM及NL2SQL打造对话式智能BI助手
  • Go JSON数据处理(Gin+Gorm)
  • 摩托车PKE感应一键启动智能安全双防护
  • 2025/03/06(嵌入式学习开始第二天)
  • C++ Qt创建计时器
  • godot在_process()函数实现非阻塞延时触发逻辑
  • 基于模糊PID控制器的混合动力汽车EMS能量管理控制系统simulink建模与仿真
  • 深度学习PyTorch之13种模型精度评估公式及调用方法
  • 3.3.2 Proteus第一个仿真图
  • 基于DeepSeek与搜索引擎构建智能搜索摘要工具
  • ThinkPhp 5 安装阿里云内容安全(绿化)
  • STM32-I2C通信外设
  • 解决JDK 序列化导致的 Redis Key 非预期编码问题