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

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

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

相关文章

Vue3中使用el-table遇到的问题

我在使用element-plus中el-table组件的时候&#xff0c;对于某一<el-table-column>标签内的内容设置show-overflow-tooltip属性&#xff0c;但这里溢出展示的tooltip的默认样式是无法像el-tooltip标签那样&#xff0c;直接可以修改的。默认的样式是这样&#xff1a; 因此…

1.树莓派4b+ubuntu18.04(ros版本melodic)+arduino mega自制两轮差速小车,实现建图导航功能

第一篇先介绍材料准备、环境配置和ros的安装 1.材料准备 1.树莓派4b&#xff0c;8g版本 2.arduino mega 3.MG310编码电机*2 4.雷达ydlidar X3 5.Tb6612电机驱动板 6.12v电池 7.ubuntu18.04ros melodic版本 2.环境配置 树莓派安装ubuntu18.04版本 ubuntu18.04版本的镜像可以…

Java中如何正确使用异常处理?

Java中如何正确使用异常处理&#xff1f; 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;在Java编程中&#xff0c;异常处理是确保程序稳定性和可靠性的重要部分…

【java】写一个发送邮箱的样例

【java】写一个发送邮箱的样例package com.ai157.aigc.controller.methods; import javax.mail.*; import javax.mail.internet.*; import java.util.Date; import java.util.Properties;public class SendEmail {/* public static void main(String[] args) {toMsg("3…

刷题——旋转数组的最小数字

旋转数组的最小数字_牛客题霸_牛客网 描述 有一个长度为 n 的非降序数组&#xff0c;比如[1,2,3,4,5]&#xff0c;将它进行旋转&#xff0c;即把一个数组最开始的若干个元素搬到数组的末尾&#xff0c;变成一个旋转数组&#xff0c;比如变成了[3,4,5,1,2]&#xff0c;或者[4,…

django DRF增删改查

本文在django所有的增删改查样例使用的DRF框架序列化操作&#xff0c;并非是简单的orm操作。 目录 ORM介绍数据库设计原则DRF增删改操作高级查询原生sql处理 ORM介绍 Django ORM&#xff08;Object-Relational Mapping&#xff0c;对象关系映射&#xff09;是 Django 框架的一…

安装vue时候发现npm淘宝镜像不能使用,报出:npm.taobao.org和registry.npm.taobao.or

2024.3.12 安装vue时候发现npm淘宝镜像不能使用&#xff0c;需要重新更换源&#xff0c;简单来说就是更换镜像 使用 npm config get registry 查看当前的镜像&#xff1b; npm config get registry 使用npm config set registry http://mirrors.cloud.tencent.com/npm/ &…

食品预包装:舌尖安全的第一道防线

在当今快节奏的生活中&#xff0c;食品预包装不仅是保护食品的屏障&#xff0c;更是传递品质与美味的使者。 预包装首先展现出的是其保鲜的魔力。它宛如一层坚固的护盾&#xff0c;有效地阻隔外界因素对食品的侵蚀&#xff0c;让食品的新鲜度和口感得以长久保存。无论是酥脆的点…

对接Shopify电商平台的流程

对接Shopify平台的流程通常包括以下关键步骤&#xff0c;在整个对接过程中&#xff0c;需要密切关注Shopify的API使用限制、认证机制、数据隐私政策等&#xff0c;确保应用的安全性和合规性。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合…

广东信息工程职业学院2024年成人高等继续教育招生简章

一、学校简介 广东信息工程职业学院位于广东省肇庆市&#xff0c;是一所具有一定办学规模&#xff0c;办学定位和培养目标明确&#xff0c;办学特色和追求鲜明&#xff0c;可持续发展的全日制普通高等学校&#xff0c;学院坚持以人为本&#xff0c;以德育人&#xff0c;以良好…

使用Jetpack Compose创建自定义可滚动网格

使用Jetpack Compose创建自定义可滚动网格 Jetpack Compose是Android开发中的现代UI工具包&#xff0c;极大地简化了界面构建过程。本文将介绍如何使用Jetpack Compose创建一个可滚动的网格布局&#xff0c;帮助开发者更高效地管理大量数据和动态内容。我们将通过示例代码详细…

python从入门到精通11:字符串是数组吗?

在Python中&#xff0c;字符串&#xff08;str&#xff09;和数组&#xff08;通常指的是列表 list 或者在某些上下文中是NumPy数组 numpy.ndarray&#xff09;是两种不同的数据结构&#xff0c;尽管它们在某些方面可能表现出相似性。 字符串&#xff08;str&#xff09;&#…

▶《强化学习的数学原理》(2024春)_西湖大学赵世钰 Ch5 蒙特卡洛方法【model-based ——> model-free】

PPT 截取必要信息。 课程网站做习题。总体 MOOC 过一遍 1、视频 学堂在线 习题 2、 过 电子书 是否遗漏 【下载&#xff1a;本章 PDF GitHub 页面链接 】 【第二轮 才整理的&#xff0c;忘光了。。。又看了一遍视频】 3、 过 MOOC 习题 看 PDF 迷迷糊糊&#xff0c; 恍恍惚惚。…

【Python/Pytorch 】-- SVM算法

文章目录 文章目录 00 写在前面01 SVM算法简介02 SVM算法的基本原理线性SVM非线性SVM 03 基于Python 版本的SVM算法04 优化目标表达式理解&#xff1a;05 约束条件表达式理解 00 写在前面 SVM算法可以结合鲸鱼算法、飞蛾扑火算法、粒子群算法、灰狼算法、蝙蝠算法等等各种优化…

OpenAPI

大家好我是苏麟 , 今天带来一个前端生成接口的工具 . 官网 : GitHub - ferdikoomen/openapi-typescript-codegen: NodeJS library that generates Typescript or Javascript clients based on the OpenAPI specification 安装命令 npm install openapi-typescript-codegen --sa…

一天了解23种设计模式

学习设计模式之前&#xff0c;我们要知道为什么需要设计模式&#xff1f;想想你在初中、高中时是怎么做数学题的&#xff1f;每遇到一个难题&#xff0c;你不需要重头开始思考解决方法&#xff0c;而是有一定的解题“套路”。设计模式就像是解题的“套路”&#xff0c;一个好的…

数据分析:微生物组差异丰度方法汇总

欢迎大家关注全网生信学习者系列&#xff1a; WX公zhong号&#xff1a;生信学习者Xiao hong书&#xff1a;生信学习者知hu&#xff1a;生信学习者CDSN&#xff1a;生信学习者2 介绍 微生物数据具有一下的特点&#xff0c;这使得在做差异分析的时候需要考虑到更多的问题&…

在LangChain中,LLM(大型语言模型)和LLM Chain的区别是什么?

简单来说&#xff0c;LLM是一个大型语言模型&#xff0c;而LLM Chain是由多个LLM或其他组件组成的链式结构&#xff0c;用于在LangChain中构建复杂的自然语言处理流程。 Direct LLM Interface: 直接大型语言模型&#xff08;LLM&#xff09;接口&#xff1a; llm Open…

Okhttp响应Json数据

简介 OkHttp是一个高效、现代的HTTP客户端库&#xff0c;专为Android和Java应用程序设计&#xff0c;用于发送网络请求和处理响应。它支持HTTP/2和SPDY协议&#xff0c;允许连接复用&#xff0c;减少延迟&#xff0c;提高网络效率。OkHttp还处理了常见的网络问题&#xff0c;如…

python爬虫入门到精通路线

当谈及Python爬虫从入门到精通的路线时&#xff0c;我们可以将其分为几个关键阶段&#xff0c;每个阶段都有其特定的学习目标和内容。以下是一个清晰的路线规划&#xff1a; 1. 入门阶段 基础知识 学习Python的基础语法、数据类型、控制流等。了解基本的网络协议&#xff08…