美文网首页
带你学习Mybatis之mybatis的sql节点

带你学习Mybatis之mybatis的sql节点

作者: 墨线宝 | 来源:发表于2024-06-22 15:22 被阅读0次

    mybatis的sql节点

    mybatis的mapper映射文件中的sql节点在初始化时会被解析成MappedStatement对象,其中sql语句会被解析为SqlSource对象,sql语句中定义的动态sql节点、文本节点等则由SqlNode接口的相应实现类表示

    SqlSource

    public interface SqlSource {
    
      BoundSql getBoundSql(Object parameterObject);
    
    }
    

    SqlSource有四个实现类

    DynamicSqlSource、ProviderSqlSource、RawSqlSource、StaticSqlSource,每个所负责的不同

    • DynamicSqlSource负责处理动态sql语句,会将处理后的sql语句封装为StaticSqlSource返回
    • RawSqlSource负责处理静态语句,会将处理后的sql语句封装为StaticSqlSource返回

    DynamicSqlSource和StaticSqlSource的区别

    StaticSqlSource中记录的sql语句虽然包含?占位符,但是可直接提交给数据库执行,而DynamicSqlSource还需要进行解析

    BoundSql

    SqlSource就是存储BoundSql对象

    public class BoundSql {
    // 存储的是写在mapper.xml中的(select|insert|delete|update)节点的sql
      private final String sql;
      // ParameterMapping描述参数,包括属性、名称、表达式、javaType、jdbcType、typeHandler等信息
      // PreparedStatement通过它可以找到parameterObject对象的属性并设置参数
      private final List<ParameterMapping> parameterMappings;
      // 传入的参数,如果传递的是多个参数,会变成一个Map对象
      private final Object parameterObject;
      private final Map<String, Object> additionalParameters;
      private final MetaObject metaParameters;
    }
    

    https://zhhll.icu/2021/框架/mybatis/组件分析/14.mybatis的sql节点/

    本文由mdnice多平台发布

    相关文章

      网友评论

          本文标题:带你学习Mybatis之mybatis的sql节点

          本文链接:https://www.haomeiwen.com/subject/jvzkcjtx.html