十五、【源码】动态Sql

源码地址:https://github.com/mybatis/mybatis-3/

仓库地址:https://gitcode.net/qq_42665745/mybatis/-/tree/15-dynamic-sql

动态Sql

解析动态Sql分为两部分

1.解析XML中Sql的时候,要将其解析成不同的SqlNode节点,但是不进行具体处理,然后根据是否有动态标签创建RawSqlSource还是DynamicSqlSource,有以下几种SqlNode:

  • StaticTextSqlNode:解析纯文本Sql
  • TextSqlNode:解析带有 ${} 或 #{} 的动态 Sql
  • TrimSqlNode:解析标签
  • IfSqlNode:解析标签

2.defaultSqlSession中执行query会调用sqlSource.getBoundSql(parameter)方法,这里会进行解析,首先不管是RawSqlSource还是DynamicSqlSource都会创建动态上下文处理,只是静态的直接获取其中的Sql就行,动态的需要将List节点集合解析并组装成一个完整的Sql然后再获取,值得注意的是TextSqlNode会在这一步处理掉${},后面的处理都一样了,使用sqlSourceParser将Sql的#{}替换成?,生成JDBC 可执行的 SQL 语句,再封装成一个BoundSql对象

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

Jenkins的jdk和maven配置

目录 传送门前言一、概念二、JDK的配置三、Maven配置四、环境变量配置五、坑 传送门 SpringMVC的源码解析(精品) Spring6的源码解析(精品) SpringBoot3框架(精品) MyBatis框架(精品&#xff09…

Python编程入门EPUB:探索编程世界的奇幻之旅

Python编程入门EPUB:探索编程世界的奇幻之旅 在数字化时代的浪潮中,编程已成为一项不可或缺的技能。而Python,作为一门简洁易懂且功能强大的编程语言,正逐渐成为初学者们的首选。那么,如何踏上Python编程的奇幻之旅呢…

「51媒体」媒体发布会如何做媒体邀约

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 媒体发布会的媒体邀约是一个需要精心策划和准备的过程。 策划与准备阶段: 明确目标:明确发布会的目标、核心议题、举办日期、时间和地点。 准备资料&#xff1a…

体验式营销+旅行文化:品牌海外推广的创新之路

在全球化的时代背景下,体验式营销作为一种新兴的营销方式,以其独特的参与性、互动性和情感共鸣,成为品牌与消费者建立深层次联系的有效手段。而将体验式营销与旅行文化相结合,能够为海外消费者提供独特的品牌体验。本文Nox聚星将和…

邦芒职场:职业转型,如何稳稳把握方向盘?

职业转型,对于许多人来说,既是一次挑战也是一次机遇。虽然它需要勇气,但只要我们做好准备,转型之路同样可以顺畅无阻。接下来,我们将为你提供一些建议,帮助你稳稳把握职业转型的方向盘。 一、明确职业定位与…

GD32单片机开发--点亮第一盏灯

知不足而奋进 望远山而前行 目录 系列文章目录 文章目录 前言 目标 内容 开发流程 需求分析 项目新建 代码编写 GPIO初始化 完整代码 程序编译 程序烧录 烧录扩展(熟悉) 官方烧录器烧录(熟悉) 总结 前言 在本次项…

ArangoDB 学习笔记

新工作需要用到 arangodb,由于之前没有接触过,所以从头开始学,记录一下学习过程中的重点。 一. ArangoDB 安装 1. 下载地址 官网地址:https://www.arangodb.com/download/ 2. 部署步骤 下载 rpm 安装包并安装 rpm -ivh arang…

wpf、winform 监听USB拔插时触发

C# USB拔插监听 C#查找设备管理器中所有的 USB 设备 wpf、winform 监听USB拔插时触发 监听Windows USB 拔插时触发 private void MainWindow_Loaded(object sender, RoutedEventArgs e){FleckWebSocketConfig.OpenSocketConfig().GetAwaiter(); //websocket 服务开启用于监听W…

MySQL 判断查询条件是否包含某字符串的几种方式

在日常的数据库操作中,我们经常需要判断某个字段中是否包含特定的字符串。在 MySQL 中,有多种方式可以实现这一需求。本文将介绍几种常见的方式,并详细说明它们的使用场景和优缺点。 1. 使用 LIKE 进行模糊查询 LIKE 是最常见的字符串匹配方…

python手动搭建transformer,并实现自回归推理

以下是添加了详细注释的代码和参数介绍: Transformer 实现及自回归推理 本文展示了如何手动实现一个简化版的Transformer模型,并用自回归方式实现一个seq2seq任务,例如机器翻译。 导入必要的库 import torch import torch.nn as nn import…

【区分vue2和vue3下的element UI DatePicker 日期选择器组件,分别详细介绍属性,事件,方法如何使用,并举例】

在 Vue 2 中,我们通常使用 Element UI 的 DatePicker 日期选择器组件。然而,如前所述,Element UI 并没有官方支持 Vue 3 的版本。但有一个叫做 Element Plus 的库,它是 Element UI 的 Vue 3 版本,并提供了类似的 DateP…

TypeScript学习(二):数据类型

/** *一.typescript类型学习 */ //1.1 number类型 let a:number; a123; //这么写会报错,a"hello,world"; console.log(a); //1.2 string类型 let b:string; b"hello,world"; console.log(b); //1.3 boolean类型 let c:booleantrue; c…

华为OD刷题C卷 - 每日刷题 13(图像物体的边界,英文输入法)

1、(图像物体的边界): 这段代码是解决“图像物体的边界”的问题。它提供了一个Java类Main,其中包含main方法和getResult方法,以及一个内部UnionFindSet类,用于计算像素1代表的物体的边界个数。 main方法首…

C#操作MySQL从入门到精通(11)——对查询数据使用正则表达式过滤

前言 对于之前提到的使用匹配、比较、通配符等过滤方式能解决大部分的项目问题,但是有时候也会遇到一些比较复杂的过滤需求,这时候就需要正则表达式来实现了,正则表达式使用regexp这个关键字来实现。 本次测试的数据库表的内容如下: 1、基本字符匹配(包含某些字符) 匹…

嵌入式之存储基本知识

系列文章目录 嵌入式之存储基本知识 嵌入式之存储基本知识 系列文章目录一、RAM与ROM二、DRAM和SRAM三、SDRAM(DRAM的一种)四、DDR 一、RAM与ROM RAM(随机存取存储器)和ROM(只读存储器)是两种不同类型的计…

揭秘VVIC API:开启高效数据交互的密钥,你的项目就差这一步

VVIC API接口概述 VVIC API提供了对VVIC服务的数据访问和操作功能。通过此API,开发者可以集成VVIC服务到他们的应用程序中,实现数据同步、用户认证、资源管理等功能。 点击获取key和secret API端点示例 用户认证 方法:POSTURL:/…

【JS】JavaScript编程语言-(Object)对象属性标志与对象属性描述符(2024-06-05)

我们知道,对象可以存储属性。 到目前为止,属性对我们来说只是一个简单的“键值”对。但对象属性实际上是更灵活且更强大的东西:其他配置选项。 1、属性标志 对象属性(properties),除 value 外&#xff0c…

Nvidia Jetson/Orin +FPGA+AI大算力边缘计算盒子:无人机自主飞行软件平台

案例简介 北京泛化智能科技有限公司(gi)所主导开发的 Generalized Autonomy Aviation System (GAAS) 是为无人机以及城市空中交通 (UAM, Urban Air Mobility) 所设计的开源无人机自主飞行框架。通过 SLAM、路径规划和 Global Optimization Graph 等功能…

【Linux】(三)—— 文件管理和软件安装

文件管理 Linux的文件管理是系统管理中的核心部分,它涉及到如何组织、访问、修改和保护文件及目录结构。 目录 文件管理基本概念常用命令查看和切换目录创建文件和目录删除文件和目录文件拷贝移动和重命名文件文件查看cat文件查看more查找文件查找文本 数据流和管道…

redsystems教程的基本使用之重置密码(忘记密码解决方法)

前言: 相信很多人都有疑惑,要是我不记得密码怎么办?如果你登录了,点击更改密码后,还是要你填写登录密码才能修改。为了解决这问题,博主通过了钻研成功搞出来了!!!&#…