带你学习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多平台发布

相关推荐
223糖6 分钟前
Idea,pycharm2026激活保姆级教程
java·ide·intellij-idea
geovindu22 分钟前
java: Gale-Shapley Algorithm
java·开发语言·后端·算法
LUCKY-LIVING35 分钟前
ELF File in linux
android·java·linux
星核0penstarry1 小时前
DeepSeek-V4-Flash 正式公测:大模型行业进入「极速平价普惠时代」
java·开发语言·人工智能
xieliyu.1 小时前
Java 线程池入门详解:线程池基础定义 + ThreadPoolExecutor 全参构造方法逐参数解析
java·开发语言·idea·javaee
lemon_sjdk1 小时前
Reactor几个重要的接口(1)
java·spring·webflux
老白干4 小时前
jjwt 0.9.1 在 JDK 11+ 上的两个“坑”与完整解决方案
java·python·log4j
圆山猫10 小时前
[Virtualization](四):Linux KVM/RISC-V 的 vCPU 运行路径
java·linux·risc-v
城管不管11 小时前
ReAct、Plan-and-Execute、Reflection 三大智能 Agent 范式核心区别
java·人工智能·算法·spring·ai·动态规划
IT小白杨11 小时前
从环境制备到自动化工作流:多账号运营的工程化架构拆解
java·经验分享·自动化·安全架构·指纹浏览器