Mybatis—SqlNode

news2025/7/19 10:46:32

  SqlNode的主要职责就是描述Mapper文件中配置的SQL信息,在Mybatis源代码中随处都能看见其身影,可见SqlNode地位是相当高的。SqlNode接口只定义了一个apply方法,且该方法只有一个DynamicContext对象作为入参。DynamicContext对象中不仅封装了Mapper调用时传入的参数信息,还提供了MyBatis内置的_parameter和_databaseId参数。

public interface SqlNode {
  boolean apply(DynamicContext context);
}

  现如今SqlNode的实现类差不多有十个左右,且每个实现类的职责都很明确,最终有MixedSqlNode实现类将所有SqlNode实现串起来执行,可以理解为一个责任链设计模式。
在这里插入图片描述
  从UML图可以看出IfSqlNode、ChooseSqlNode、ForEachSqlNode、MixedSqlNode、TrimSqlNode、StaticTextSqlNode、VarDeclSqlNode和TextSqlNode直接实现自SqlNode接口,SetSqlNode和WhereSqlNode则是继承自TrimSqlNode类。各实现类的职责,

  • IfSqlNode,描述XML或者注解中带有标签的内容,XMLLanguageDriver在解析Mapper SQL配置信息时,会将XML或者注解中的标签进行解析,然后将其转换为IfSqlNode对象。
  • ChooseSqlNode,描述XML或者注解中带有标签的内容。
  • ForEachSqlNode,描述XML或者注解中带有标签的内容。
  • MixedSqlNode,将一组SqlNode对象进行串联执行,通常多个SqlNode对象才能联合表述一个SQL信息,所以就需要借助MixedSqlNode来将其进行串联,最终形成一个完整的SQL信息。
  • WhereSqlNode,描述XML或者注解中的标签。
  • TrimSqlNode,描述XML或者注解中的标签。
  • StaticTextSqlNode,描述XML或者注解中不带有任何标签的配置信息,即静态文本内容。
  • VarDeclSqlNode,描述XML或者注解中的标签。
  • TextSqlNode,如果静态文本中包含 占 位 符 , 那 么 就 说 明 {}占位符,那么就说明 {}中的内容需要在Mapper调用时,执行SQL语句前进行替换,此时就需要用TextSqlNode来描述。
  • SetSqlNode,描述XML或者注解中的标签。

MixedSqlNode

  MixedSqlNode将一组SqlNode对象进行串联执行,MixedSqlNode提供的构造函数就需要传入一组SqlNode对象来表述一个动态SQL信息,然后apply方法就会遍历调用各SqlNode的apply方法来完成其逻辑执行。

public class MixedSqlNode implements SqlNode {
  private final List<SqlNode> contents;

  public MixedSqlNode(List<SqlNode> contents) {
    this.contents = contents;
  }

  @Override
  public boolean apply(DynamicContext context) {
    contents.forEach(node -> node.apply(context));
    return true;
  }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/8871.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

抓包工具 Charles 使用手册

Charles 是一款抓包软件&#xff0c;通过代理的形式拦截所有的 HTTP 和 HTTPS 请求&#xff0c;是开发测试的一大利器 下载和激活 在 Charles 下载安装包&#xff0c;在 此处 获得注册码&#xff0c;点击下方输入注册码激活软件 抓主机的 HTTP 包 选中 Proxy > Windows P…

第五章 数组和广义表

数组和广义表 5.1多维数组 5.1.1数组的逻辑结构 数组是我们熟悉的一种数据结构&#xff0c;可以看作线性表的推广。 数组作为一种数据结构其特点是结构中的元素本身可以是具有某种结构的数据&#xff0c;但属于同一类型。比如&#xff1a;一维数组可以看作一个线性表&#…

NDepend v2022.2.1.9665 专业版

NDepend 基本上被描述为.NET 托管代码的静态分析工具。这个特定的工具能够支持大量代码度量&#xff0c;允许使用直接图和依赖矩阵来可视化依赖关系。 NDepend 工具还能够通过架构验证过程以及规则及其质量为用户和开发人员执行基于代码的快照比较。有些规则基本上是用户定义的…

联想中国上半财年业绩:转型深入 方案服务同比增24%

11月15日&#xff0c;联想中国举办2022/23财年上半财年工作总结会。会上透露&#xff0c;联想中国经受住诸多不利因素的考验&#xff0c;PC市场份额保持稳定&#xff0c;3S新业务&#xff08;3S指智能设备、智能基础设施和方案服务&#xff09;顽强成长、收入占比达到28.6%&…

MCE 虚拟筛选、小分子化合物库

CNS Library &#xff08;含 47,040 种化合物&#xff09;高血脑屏障穿透率的小分子化合物数据库 CNS library 精选具有低极性表面积(TPSA< 70 2)、低 ClogP (平均为1.63)、低氢键形成程度(氢键供体和受体的总数小于 8 )、低 MW(平均为283) 等具有高血脑屏障穿透率的化合物…

css毛玻璃效果/el-progress进度条渐变/axios的基本使用/跨域配置/关闭eslint验证

css磨砂效果 效果图 实现方法 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport" content&qu…

NNG pair 异步通信

一&#xff0c;利用NNG pair模式&#xff0c;实现异步通信。 二&#xff0c;manager端 绑定地址&#xff0c;回调函数里 接收 异步消息&#xff1a; #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <…

HTTP协议中Gzip格式的流量分析与识别

背景 在协议分析过程中&#xff0c;经常会发现gzip压缩的数据&#xff0c;例如在HTTP协议中&#xff0c;在HTTP头中会标示&#xff0c;内容编码为gzip、DEFLATE。 但是&#xff0c;还有很多情况&#xff0c;例如一些非HTTP协议&#xff0c;特别是私有协议中&#xff0c;数据同…

强大的图片处理工具GraphicsMagick

前言 项目中我们经常需要对图片进行压缩、剪切、添加水印、生成缩略图、图片合成等图片处理操作&#xff0c;关于这些图片复杂处理&#xff0c;我们将如何实现呢&#xff0c;本文将介绍GraphicsMagick对图片进行相关处理功能。 简介 GraphicsMagick是一个免费的创建、编辑、…

16.Redis系列之Redisson分布式锁原理

本文学习Redisson分布式锁的原理以及优缺点 1. Redisson分布式锁原理 lua脚本是原子操作&#xff0c;redis会将整个脚本作为一个整体执行&#xff0c;中间不会被其他命令打断 # RedissonLock.tryLockInnerAsync方法内lua脚本加锁 <T> RFuture<T> tryLockInnerAs…

代码随想录算法训练营第三十四天| LeetCode1005. K 次取反后最大化的数组和、LeetCode134. 加油站、LeetCode135. 分发糖果

一、LeetCode1005. K 次取反后最大化的数组和 1&#xff1a;题目描述&#xff08;1005. K 次取反后最大化的数组和&#xff09; 给你一个整数数组 nums 和一个整数 k &#xff0c;按以下方法修改该数组&#xff1a; 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。重复这个过…

TNF 又见 《Cell》

现有的研究表明&#xff0c;需要新的机会来增加免疫检查点封锁&#xff08;Immunecheckpoint blockade&#xff0c;ICB&#xff09;的影响。尽管干扰素&#xff08;IFN&#xff09;γ途径同时具有 ICB 抗性因子和治疗机会&#xff0c;但至今为止&#xff0c;研究人员尚未系统地…

采用新项目管理软件的四个步骤

这是采用新项目管理软件的有趣之处&#xff1a;它本身实际上是一个重大项目&#xff0c;而且您的组织越大&#xff0c;这个过程就越艰巨。 当然&#xff0c;成功的项目管理实施最终将有助于简化您的运营并最大限度地提高跨部门的效率——这有利于团队成员的士气、客户满意度…

国内外的免费AI作图工具

1.文心一格 文心一格 - AI艺术和创意辅助平台 “推荐”页面操作比较简单&#xff0c;只需要需要简单的一句话&#xff0c;等几分钟就可以直接生成&#xff1a; 主要可以用来生成不同“氛围感”十足的场景&#xff1a; 美丽的花田&#xff1a; 优点&#xff1a; 1.比较容易…

【数据结构】—— 二叉树(C)

二叉树 文章目录二叉树二叉树的概念&#xff1a;树的术语二叉树的大概样式先序创建二叉树二叉树的遍历方式先序遍历中序遍历后序遍历二叉树的概念&#xff1a; 二叉树&#xff08;Binary Tree&#xff09;是n(n>0)个结点的有限集合&#xff0c;该集合或者为空集&#xff08…

bugku-web-安慰奖

题目没给提示 点开链接 是空白页面 查看源代码 base64加密 拿去解码 备份文件 使用工具跑一下目录 &#xff08;dirsearch) 存在一个flag.php文件 但是访问没有结果 锁定index.php.bak 文件 下载下来 打开 进行代码审计 是php序列化 反序列化的内容 代码审计&…

【Python】Numpy生成坐标网格

文章目录meshgridmgrid和ogridindicesmeshgrid 在三维图的绘制过程中&#xff0c;一般需要x,y,zx,y,zx,y,z之间的对应关系&#xff0c;但对于图像而言&#xff0c;其x,yx,yx,y轴坐标是体现在像素栅格中的&#xff0c;从而图像矩阵中的像素强度&#xff0c;其实表示的是zzz轴的…

深度学习算法应用——使用LSTM对双色球进行统计与预测

前言 福彩双色球的玩法和规则是双色球投注区分为红色球号码区和蓝色球号码区&#xff0c;红色球号码从1-33&#xff0c;蓝色球号码是从1-16。投注方法是&#xff0c;从红色区选出6个不重复的号码再加上蓝色区的一个号组成一个投注组。双色球通过摇奖器确定中奖号码&#xff0c…

Zookeeper中的watch机制

客户端&#xff0c;可以通过在znode上设置watch&#xff0c;实现实时监听znode的变化Watch事件是⼀个⼀次性的触发器&#xff0c;当被设置了Watch的数据发⽣了改变的时候&#xff0c;则服务器将这个改变发送给设置了Watch的客户端⽗节点的创建&#xff0c;修改&#xff0c;删除…

观测云产品更新|新增观测云、SLS 联合解决方案;新增 3 个智能巡检配置文档;新增链路错误追踪查看器等

观测云更新 新增观测云、SLS 联合解决方案 观测云新增 SLS 存储方案&#xff0c;支持阿里云 SLS 用户能够快速使用观测云做数据查看分析。在观测云进行商业版注册/升级时&#xff0c;选择”阿里云账号结算“后&#xff0c;您可以选择SLS 存储方案&#xff0c;将数据存放在自…