带你学习Mybatis之mybatis的sql节点

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多平台发布

相关推荐
悟空码字16 分钟前
无缝集成指南,SpringBoot三步接入华为云短信服务
java·springboot·编程技术·后端开发·华为云短信
E_ICEBLUE21 分钟前
【2026 最新教程】Java 自动化提取 PDF 表格:从文本到 Excel/CSV 的全场景实现
java·pdf·自动化
C雨后彩虹23 分钟前
无向图染色
java·数据结构·算法·华为·面试
J_HelloWorld25 分钟前
缺页中断:Java高性能存储的隐形推手
java·缺页中断
一代明君Kevin学长29 分钟前
记录一个上手即用的Spring全局返回值&异常处理框架
java·网络·python·spring
悟空码字34 分钟前
SpringBoot整合MyBatis-Flex保姆级教程,看完就能上手!
java·spring boot·后端
爬山算法35 分钟前
Hibernate(43)Hibernate中的级联删除如何实现?
java·python·hibernate
J_liaty35 分钟前
Java工程师的JVM入门教程:从零理解Java虚拟机
java·开发语言·jvm
qq_25005686840 分钟前
SpringBoot 引入 smart-doc 接口文档插件
java·spring boot·后端
珠穆峰44 分钟前
linux清理缓存命令“echo 3 > /proc/sys/vm/drop_caches”
java·linux·缓存