【12.MyBatis源码剖析与架构实战】15.2 if和where标签执⾏过程剖析-执⾏数据库操作
在 MyBatis 执行数据库操作时,<if>和<where>标签会从静态配置变为动态逻辑,通过遍历初始化阶段构建的SqlNode 语法树,动态地完成 SQL 拼接与修剪。
整个过程的核心入口是DynamicSqlSource的getBoundSql方法。其执行可分为四个步骤:
- 创建上下文:创建
DynamicContext对象,作为 SQL 拼接的“黑板”。 - 拼接动态 SQL:调用语法树根节点的
apply()方法,递归执行每个SqlNode,处理<if>的条件判断和<where>的智能修剪。 - 解析
#{}占位符:用SqlSourceBuilder将#{...}替换为 JDBC 占位符?,并生成参数映射。 - 生成最终对象:产出包含最终 SQL 和参数信息的
BoundSql对象。
⚙️ 核心执行流程时序图
下图直观地展示了从getBoundSql调用到最终生成BoundSql的完整协作过程。
