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

相关推荐
sszdlbw3 分钟前
后端springboot框架入门学习--第二篇
java·spring boot·学习
阿拉斯攀登5 分钟前
MyBatis 全面解析 & Spring Boot 集成实战
java·spring boot·mybatis·持久层框架
A尘埃6 分钟前
Java业务场景(高并发+高可用+分布式)
java·开发语言·分布式
白仑色11 分钟前
java中的anyMatch和allMatch方法
java·linux·windows·anymatch·allmatch
刃神太酷啦12 分钟前
C++ list 容器全解析:从构造到模拟实现的深度探索----《Hello C++ Wrold!》(16)--(C/C++)
java·c语言·c++·qt·算法·leetcode·list
wearegogog12312 分钟前
C# 条码打印程序(一维码 + 二维码)
java·开发语言·c#
码农阿豪13 分钟前
用 PlaylistDL 攒私人音乐库?加个 cpolar,出门在外也能随时听!
java
LaughingDangZi13 分钟前
vue+java分离项目实现微信公众号开发全流程梳理
java·前端·后端
爬山算法14 分钟前
Netty(14)如何处理Netty中的异常和错误?
java·前端·数据库
李慕婉学姐31 分钟前
【开题答辩过程】以《基于Android的健康助手APP的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
android·java·mysql