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,一经查实,立即删除!

相关文章

python strip()函数使用

默认情况下去除字符串首尾的空格和换行符号; 但是也可以去掉任意的字符串,可以把首尾的字符串去除到再也找不到为止,但是需要注意可能会由于空格和换行符的存在使得待去除的字符串没有被去除: a "[[1,2,3,4,5], [2,3,4,5]]…

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和…

美团面试题:生成字符串的不同方式

美团面试题:生成字符串的不同方式 引言问题分析动态规划思路伪代码C代码实现代码解析复杂度分析优化建议结论引言 小红拿到了一个空字符串 s s s,她希望通过两种操作生成一个给定的字符串 t t t。我们需要计算生成字符串

python(进阶2)实现自动化注册和登录

1. 分析需求 后端完成接口以后,工作中可能会涉及到自测通断,a接口和b接口之间可能有关联关系,例如:a接口注册,b接口登录,就需要a接口返回的参数传递到b接口 2. 环境准备 需要这些类包 import requests import rand…

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…

替代 Django 默认 User 模型并使用 `django-mysql` 添加数据库备注20240904

替代 Django 默认 User 模型并使用 django-mysql 添加数据库备注 前言 在 Django 项目开发中,默认的 User 模型虽然能够满足许多基础需求,但在实际项目中我们常常需要对用户模型进行定制化。通过覆盖默认的 User 模型,我们可以根据具体的业…

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

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

【论文阅读】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) 简介 现有的视觉跟踪方法通常以…

iOS——frame和bounds的区别

把frame理解为占用区域,把bounds理解为边界。View在旋转过程中,其实自己的坐标系统并没有发生改变,bounds中的origin只能通过setBounds方法修改。 frame 定义了视图在其父视图坐标系统中的位置和大小。其坐标系是相对于俯视图的坐标系。 bou…

如何保证 UDP 的可靠性传输?

一、TCP 和 UDP 的区别 1、TCP基于连接,UDP基于无连接。 2、对系统资源的要求:TCP 较多,UDP 少。 3、UDP 程序结构较简单。 4、TCP基于流模式,UDP基于数据报模式 。 5、TCP 保证数据正确性,UDP 不保证数据准确性&…

滚雪球学MyBatis(03):基本配置

前言 欢迎回到我们的MyBatis系列教程。在上一期中,我们详细讲解了MyBatis的环境搭建,包括JDK、Maven/Gradle的安装和配置,以及MySQL数据库的准备工作。现在,我们已经搭建好了开发环境,是时候开始配置MyBatis了。本期内…

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

使用PHP和MQTT构建高效的物联网数据转发服务器流程

一、项目概述 项目目标和用途 本项目旨在搭建一个基于PHP的物联网服务器,能够接收来自各种传感器的数据,并通过MQTT协议将数据转发到其他设备或服务。该系统适用于智能家居、环境监测等场景,能够实现实时数据监控和远程控制。 技术栈关键词…

应用层协议HTTP

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

能量项链,洛谷

解释&#xff1a; 环形dp问题还是考虑将环拉直&#xff0c;可以参考我上一篇文章&#xff1a;环形石子合并 [2 3 5 10 2] 3 5 10 将环拉直&#xff0c;[]内是一个有效的区间&#xff0c;可以模拟吸收珠子的过程&#xff0c; 如[2 3 5] <>(2,3)(3,5) 2是头&#xff0c;…

Apache Pig

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