SqlSource创建流程
入口:XMLLanguageDriver#createSqlSource
@Override
public SqlSource createSqlSource(Configuration configuration, XNodescript, Class<?> parameterType) {
// 初始化了动态SQL标签处理器
XMLScriptBuilder builder = new XMLScriptBuilder(configuration, script, parameterType);
// 解析动态SQL
return builder.parseScriptNode();
}
SqlSource接口的几个实现类
DynamicSqlSource:
主要是封装动态SQL标签解析之后的SQL语句和带有${}的SQL语句,${}和动态标签中的表达式是都OGNL表达式,都是使用OGNL表达式从入参对象中获取
RawSqlSource:
主要封装带有#{}的SQL语句或者可直接执行的SQL语句,则使用该SqlSource来封装SQL信息
StaticSqlSource:
是BoundSql中要存储SQL语句的一个载体,上面两个SqlSource的SQL语句,最终都会存储到该SqlSource实现类中。