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

相关推荐
老约家的可汗9 分钟前
搜索二叉树的概念及使用
java·开发语言
被摘下的星星20 分钟前
Maven
java·maven
悟空码字21 分钟前
别再重复造轮子了!SpringBoot对接第三方系统模板,拿来即用
java·spring boot·后端
yaaakaaang21 分钟前
十七、迭代器模式
java·迭代器模式
我爱cope21 分钟前
【从0开始学设计模式-8| 桥接模式】
java·设计模式·桥接模式
Lsk_Smion22 分钟前
Hot100(开刷) 之 环形链表(II)-- 随机链表的复制 -- 翻转二叉树
java·后端·kotlin·力扣·hot100
indexsunny26 分钟前
互联网大厂Java求职面试实战:Spring Boot与微服务架构解析
java·spring boot·redis·kafka·spring security·flyway·microservices
lulu121654407832 分钟前
Claude Code Routines功能深度解析:24小时云端自动化开发指南
java·人工智能·python·ai编程
ch.ju34 分钟前
Java程序设计(第3版)第二章——关系运算符
java
Tirzano37 分钟前
springsession全能序列化方案
java·开发语言