mybatis的sql节点
mybatis的mapper映射文件中的sql节点在初始化时会被解析成MappedStatement对象,其中sql语句会被解析为SqlSource对象,sql语句中定义的动态sql节点、文本节点等则由SqlNode接口的相应实现类表示
SqlSource
1 | public interface SqlSource { |
SqlSource有四个实现类
DynamicSqlSource、ProviderSqlSource、RawSqlSource、StaticSqlSource,每个所负责的不同
- DynamicSqlSource负责处理动态sql语句,会将处理后的sql语句封装为StaticSqlSource返回
- RawSqlSource负责处理静态语句,会将处理后的sql语句封装为StaticSqlSource返回
DynamicSqlSource和StaticSqlSource的区别
StaticSqlSource中记录的sql语句虽然包含?占位符,但是可直接提交给数据库执行,而DynamicSqlSource还需要进行解析
BoundSql
SqlSource就是存储BoundSql对象
1 | public class BoundSql { |