MyBatis-MappedStatement什么时候生成?QueryWrapper如何做到动态生成了SQL?

通过XML配置的MappedStatement

这部分MappedStatement主要是由MybatisXMLMapperBuilder进行解析,核心逻辑如下:
在这里插入图片描述
在这里插入图片描述

通过注解配置的MappedStatement

在这里插入图片描述
核心逻辑就在这个里面了:
在这里插入图片描述

继承BaseMapper的MappedStatement

在这里插入图片描述
我们看看这个类,里面就提供了一些默认的方法:
在这里插入图片描述

然后得到这个方法列表以后就进行了MappedStatement的注册:
在这里插入图片描述
在这里插入图片描述

QueryWrapper如何生效?

在这里插入图片描述
在这里插入图片描述
可以很清晰的看到QueryWrapper这个参数给我们内置了名称ew。那么怎么根据我们QueryWrapper里面的条件生成SQL的?答案就在这个getBoundSql里面:

在这里插入图片描述
可以看到当参数为QueryWrapper的时候其实Map里面有两个参数但是这两个参数都指向同一个对象,在创建DynamicContext会将传过来的参数存储在private final ContextMap bindings里面:
在这里插入图片描述
前面我们提到继承BaseMapper的MappedStatement注册,这里面其实又根据不同的CommandType生成了不同的动态SQL语句。
在这里插入图片描述

并且根据动态SQL创建了SqlSource:
在这里插入图片描述
上面创建的SqlSource 在使用QueryWrapper进行查询的时候会被用到,现在我们就有了参数和SqlSource,接下来就是生成真正的SQL:
在这里插入图片描述
我们看到Context#getSql 的时候就已经拿到了Sql:
在这里插入图片描述
所以这个核心逻辑就RootSqlNode.apply()做很多操作:
在这里插入图片描述
我们看看里面的逻辑,很清晰的看到针对不动的Node进行了不同的处理,这个时候生成了我们最终的SQL并且完成了字段和属性的绑定,底层是通过Ognl去实现的:
在这里插入图片描述

接着往下走,返回之前已经生成了ParaMeterMappings,生成了预编译的SQL:
在这里插入图片描述
后面就是把真正的值填进去执行查询操作了。

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

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

相关文章

Java项目——苍穹外卖(一)

Entity、DTO、VO Entity(实体) Entity 是表示数据库表的对象,通常对应数据库中的一行数据。它通常包含与数据库表对应的字段,并可能包含一些业务逻辑。 DTO(数据传输对象) 作用:DTO 是用于在…

【小沐学OpenGL】Ubuntu环境下glfw的安装和使用

文章目录 1、简介1.1 OpenGL简介1.2 glfw简介 2、安装glfw2.1 直接命令二进制安装2.2 源码安装 3、测试glfw3.1 测试1,glfwglew3.2 测试2,glfwglad3.3 测试3 结语 1、简介 1.1 OpenGL简介 OpenGL作为图形界的工业标准,其仅仅定义了一组2D和…

Vivado编译报错黑盒子问题

1 问题描述 “Black Box Instances: Cell **** of type ** has undefined contents and is considered a back box. The contents of this cell must be defined for opt_design to complete successfully.” 检查工程代码提示的模块,该模块为纯手写的Veril…

注册安全分析报告:熊猫频道

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…

【论文阅读】CiteTracker: Correlating Image and Text for Visual Tracking

paper:[2308.11322] CiteTracker: Correlating Image and Text for Visual Tracking (arxiv.org) code:NorahGreen/CiteTracker: [ICCV23] CiteTracker: Correlating Image and Text for Visual Tracking (github.com) 简介 现有的视觉跟踪方法通常以…

前端:HTML、CSS、JS、Vue

1 前端 内容概要 了解前端三件套(HTML、CSS、JS)在前端所起的作用掌握HTML标签的功能,掌握重要标签(a标签,form标签)了解CSS了解JS的基础语法掌握Vue的基础语法重点掌握Vue项目怎么启动项目掌握前后端分离是什么。前端做什么事情,后端做什么…

视频监控系统布局策略:EasyCVR视频汇聚平台构建高效、全面的安全防线

随着科技的飞速发展,视频监控系统已成为现代社会安全防范的重要组成部分,广泛应用于公共场所、企业园区、住宅小区等各个领域。一个科学合理的视频监控系统布局与选型策略,不仅能够显著提升安全监控的效率和效果,还能在关键时刻提…

Pytest-@pytest.fixture夹具篇(一)

一、定义 在Python的pytest测试框架中,pytest.fixture是一个(不是唯一)装饰器,用于定义一个测试夹具。 二、简单实例 使用参数autouserTrue pytest.fixture(autouseTrue) def my_fixture():print("Setup: 准备测试环境&q…

计算机毕业设计 | SpringBoot+vue 游戏商城 steam网站管理系统(附源码)

1,项目背景 国家大力推进信息化建设的大背景下,城市网络基础设施和信息化应用水平得到了极大的提高和提高。特别是在经济发达的沿海地区,商业和服务业也比较发达,公众接受新事物的能力和消费水平也比较高。开展商贸流通产业的信息…

应用层协议HTTP

应用层协议中的 HTTP(超文本传输协议)。在互联网中,HTTP 协议是一个至关重要的一个协议,它定义了客户端与服务器之间如何进行通信,以交换或传输超文本。 本篇介绍了有关 URL 的相关知识,http 的报文格式&am…

Apache Pig

目录 一、配置说明1.本地模式2.集群模式 二、pig的数据模型三、pig的数据类型四、惰性执行五、pig的基本语法5.1语法说明5.2案例操作 六、pig的自定义函数 一、配置说明 1.本地模式 操作的是Linux系统文件 pig -x local关键日志 当前处于root目录下 2.集群模式 连接的是…

CentOS7单机环境安装k8s集群

目录 1、环境准备 2、安装依赖工具 3、配置 Kubernetes 的国内 Yum 源 4. 安装 Kubernetes 组件 5、初始化 Kubernetes 集群 1. 容器运行时没有正常运行 1.1. 可能的原因 1.2. 解决办法 2. 初始化拉取镜像卡住 2.1. 使用国内的镜像源(无法解决问题&#x…

AI绘画工具排行榜:探索最受欢迎的AI绘图软件特点与选择指南

AI绘画工具各有优势,从开放性到对特定语言和文化的支持,以及对图像细节和艺术性的不同关注点,根据具体需求选择合适的工具 MidJourney 图片品质卓越,充满独特创意,初期能够免费获取数十账高质量图片,整个生…

ImportError: cannot import name ‘print_log‘ from ‘logging‘

mmcv升级到2.后删除了很多 解决 查FAQ文档,找到 添加到mmcv.utils下即可

海事行政执法证照片要求及尺寸格式修改方法

在海事行政执法领域,证件照片不仅是个人形象的展示,更是专业严谨态度的体现。一张符合规范的照片,不仅能够提升执法人员的权威性,还能在执行任务时获得更多的尊重和信任。本文将为您详细介绍海事行政执法证照片的要求,…

Windows系统安装node.js环境并创建本地服务使用内网穿透发布至公网

目录 前言 1.安装Node.js环境 2.创建node.js服务 3. 访问node.js 服务 4.内网穿透 4.1 安装配置cpolar内网穿透 4.2 创建隧道映射本地端口 5.固定公网地址 前言 作者简介: 懒大王敲代码,计算机专业应届生 今天给大家聊聊Windows系统安装node.js环…

网络安全知识科普:什么是网络准入控制系统?有哪些?

在当今数字化时代,网络安全已成为企业和组织不可忽视的重要议题。随着远程工作模式的普及和物联网设备的增加,网络边界越来越模糊,传统防火墙已经不足以应对日益复杂的威胁环境。在这种背景下,网络准入控制系统(Network Access Co…

Redis持久化机制—RDB与AOF

Redis持久化机制 RDB(默认) **思想:**保存整个数据库的快照,也就是RDB文件,有两种保存方式,前台保存save和后台保存bgsave,前者会阻塞主进程程,后者则是fork一个子进程去完成备份操…

C++入门9——list的使用

目录 1.什么是list? 2.list的构造 3.list迭代器的使用(list iterator) 4.list capacity 5.list modifiers 6.list的其他操作 1.什么是list? 在官网中,对list有这样的介绍: Lists are sequence co…

SLM561A​​系列 60V 10mA到50mA线性恒流LED驱动芯片 为智能家居照明注入新活力

SLM561A系列选型参考: SLM561A10ae-7G SOD123 SLM561A15ae-7G SOD123 SLM561A20ae-7G SOD123 SLM561A25ae-7G SOD123 SLM561A30ae-7G SOD123 SLM561A35ae-7G SOD123 SLM561A40ae-7G SOD123 SLM561A45ae-7G SOD123 SLM561A50ae-7G SOD123 …