【12.MyBatis源码剖析与架构实战】12.SqlSource解析源码剖析-MyBatis初始化流程
MyBatis SqlSource 解析源码剖析(初始化阶段)
SqlSource是 MyBatis 中代表一条 SQL 语句(可能带有动态标签)的接口,它负责在运行时根据传入的参数生成BoundSql(包含最终 SQL 和参数映射)。在 MyBatis 初始化阶段,XML 文件中定义的 SQL 会被解析成SqlSource对象,并存储在MappedStatement中。本文将从源码层面详细剖析SqlSource的解析过程,聚焦于初始化阶段(XMLScriptBuilder解析 SQL 节点,生成SqlNode树并构建SqlSource),不涉及运行时执行。
一、SqlSource 接口与实现类
publicinterfaceSqlSource{BoundSqlgetBoundSql(ObjectparameterObject);}| 实现类 | 说明 |
|---|---|
RawSqlSource | 封装静态 SQL(不包含${}或动态标签),在初始化阶段就完成#{}解析。 |
DynamicSqlSource | 封装动态 SQL(包含动态标签或${}),运行时根据参数动态生成 SQL。 |
StaticSqlSource | 由SqlSourceBuilder创建,内部持有解析后的 SQL 字符串和参数映射,通常不直接由 XML 解析产生。 |
初始化阶段主要涉及RawSqlSource和DynamicSqlSource的创建。
