MyBatis基于XML的使用——动态sql

news2024/11/18 9:37:05

1、动态sql
动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它
类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。
利用动态 SQL,可以彻底摆脱这种痛苦。
使用动态 SQL 并非一件易事,但借助可用于任何 SQL 映射语句中的
强大的动态 SQL 语言,MyBatis 显著地提升了这一特性的易用性。
如果你之前用过 JSTL 或任何基于类 XML 语言的文本处理器,你对动
态 SQL 元素可能会感觉似曾相识。在 MyBatis 之前的版本中,需要花时间了解大量的元素。借助功能强大的基于 OGNL 的表达式,MyBatis 3 替换了之前的大部分元素,大大精简了元素种类,现在要学习的元素种类比原来的一半还要少。
if
choose (when, otherwise)
trim (where, set)
foreach
bind
sql片段

1、if
EmpDao.xml
在这里插入图片描述
Empdao
在这里插入图片描述
test:
在这里插入图片描述
在这里插入图片描述
EmpDTO
在这里插入图片描述
在这里插入图片描述
看起来测试是比较正常的,但是大家需要注意的是如果我们传入的参
数值有缺失会怎么呢?这个时候拼接的sql语句就会变得有问题,例如不传参数或者丢失最后一个参数,那么语句中就会多一个where或者and的关键字,因此
在mybatis中也给出了具体的解决方案:
where
where 元素只会在子元素返回任何内容的情况下才插入 “WHERE” 子
句。而且,若子句的开头为 “AND” 或 “OR”,where 元素也会将它们去除。

empmapper.xml
在这里插入图片描述
其他的不需要做修改
现在看起来没有什么问题了,但是我们的条件添加到了拼接sql语句的
前后,那么我们该如何处理呢?
使用trim
trim截取字符串:
prefix:前缀,为sql整体添加一个前缀
prefixOverrides:去除整体字符串前面多余的字符
suffixOverrides:去除后面多余的字符串
在这里插入图片描述
3、foreach
动态 SQL 的另一个常见使用场景是对集合进行遍历(尤其是在构建
IN 条件语句的时候)
empmapper.xml
在这里插入图片描述
在这里插入图片描述
4、choose、when、otherwise
有时候,我们不想使用所有的条件,而只是想从多个条件中选择一个
使用。针对这种情况,MyBatis 提供了 choose 元素,它有点像 Java 中的
switch 语句
empmapper.xml
在这里插入图片描述
5、set
用于动态更新语句的类似解决方案叫做 set。set 元素可以用于动态包
含需要更新的列,忽略其它不更新的列。

empmapper.xml

在这里插入图片描述
当然使用set修改数据也可以使用trim来修改(效果一致):例如
在这里插入图片描述
达到的效果是一样的,但是个人建议使用set更好一点,不需要写那么多代码
bind元素和sql片段
bind 元素允许你在 OGNL 表达式以外创建一个变量,并将其绑定到当前的上下文。
sql这个元素可以用来定义可重用的 SQL 代码片段,以便在其它语句中使用。 参数可以静态地在加载的时候)确定下来,并且可以在不同的 include 元素中定义不同的参数值。
在这里插入图片描述
在这里插入图片描述
MyBatis常用OGNL表达式
在这里插入图片描述
使用foreach实现循环逐条插入:
empmapper.xml
在这里插入图片描述
empdao
在这里插入图片描述

emp.pojo
在这里插入图片描述
在这里插入图片描述
test
在这里插入图片描述

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

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

相关文章

14服务-ClearDiagnosticlnformation

诊断协议那些事儿 诊断协议那些事儿专栏系列文章,本文介绍存储数据传输服务下的14服务ClearDiagnosticlnformation,客户端使用ClearDiagnosticlnformation服务清除一个或多个服务器存储器中的诊断信息。 关联文章:$19服务:DTCStatusMask和s…

CockroachDB-读和写

本文知识点来源于官网地址https://www.cockroachlabs.com/docs/stable/architecture/reads-and-writes-overview.html 查询执行 当CRDB执行查询时,集群将请求路由到包含相关数据的范围的Leaseholder。如果查询涉及多个范围,则请求将发送给多个Leasehol…

求实数的整数次幂(循环版)(高效)(位运算解题)

求实数的整数次幂(循环版)(高效) (10 分) 原理图: 请编写函数,用循环语句以最快的方法求任意实数的任意整数次幂。 函数原型 double Power(double x, int n); 说明:参数 x 为底数,n 为指数。若参数正确,则函数值为…

智能驾驶开启产业新赛道:资本扎堆布局车规级高精定位

2022年被称为高阶智能驾驶元年的背后,新的产业链正在悄然发展。 车规级高精定位便是其中之一。2022年10月,主业聚焦于动力总成测试的上海华依科技集团股份有限公司(以下简称“华依科技”,688071.SH),发布公…

漫画风格迁移神器 AnimeGANv2:快速生成你的漫画形象

生成你的漫画形象! 漫画风格迁移神器 AnimeGANv2 文章目录生成你的漫画形象! 漫画风格迁移神器 AnimeGANv2快速在线生成你的漫画形象AnimeGAN 简要介绍与其他动漫风格迁移模型的效果对比AnimeGANv2 的优点AnimeGANv2 风格多样化AnimeGANv2 网络结构快速生…

基于stm32单片机的水位检测自动抽水系统

资料编号:106 下面是相关功能视频演示: 106-基于stm32单片机的水位检测自动抽水系统Proteus仿真(源码仿真全套资料)功能介绍: 使用滑动变阻器模拟水位监测器,通过改变电压值表示水位的变化。stm32通过ADC…

【前端】从 0 到 1 实现一个网站框架(一、注册 [1] )

Hi~你好呀,等你很久啦~ 我是 LStar,一枚来自北京的初二女生,2020 年年初加入 CSDN。 话不多说,直入主题~(我现在看两年多前我 11 岁那会发的文章,越看越想笑。为了不让四年后 18 岁的我看着这篇文章露出 …

超详细的mysql多表操作教程

目录 外键约束 概念 特点 操作 多表联合查询 概念 操作 多表操作总结 外键约束 概念 特点 定义一个外键时,需要遵守下列规则: 主表必须已经存在于数据库中,或者是当前正在创建的表。 必须为主表定义主键。 主键不能包含空值&#xf…

967亿销售额!博世解码智能汽车新蓝图

随着新一轮科技革命和产业变革的深化,在低碳化、电动化和智能化的推动下,处于变革关键时期的新能源汽车产业,正逐步由“政策驱动”转向“市场驱动”,智能化、网联化成为新趋势。 据中国汽车工业协会统计,今年我国新能…

通过 Traefik Hub 暴露家里的网络服务

Traefik Hub 简介 📚️Reference: 你的云原生网络平台 -- 发布和加固你的容器从未如此简单。 Traefik Hub 为您在 Kubernetes 或其他容器平台上运行的服务提供一个网关。 Traefik Hub 定位: 云原生网络平台 它有 2 大核心功能,我这次体验感…

pytorch深度学习实战lesson23

第二十三课 AlexNet AlexNet是在2012年被发表的一个金典之作,并在当年取得了ImageNet最好成绩,也是在那年之后,更多的更深的神经网路被提出,比如优秀的vgg,GoogleLeNet. 其官方提供的数据模型,准确率达到57.1%,top 1-5…

认识计算机中的简单指令集

我们现在有了一个新的寄存器,叫做指令寄存器。它包含一个字节,不同的内容表示控制部分的不同操作模式。也被称为指令代码。指令寄存器是一个字节,因此可能有多达256条不同的指令。所有指令都涉及在总线上移动字节。指令将导致字节进出RAM&…

【JavaEE】PCB和进程调度的基本过程

文章目录什么是进程PCB的组成PID内存指针文件描述符表并行和并发进程调度相关属性进程的状态优先级上下文进程的记账信息什么是进程 进程是正在运行的程序的实例(an instance of a computer program that is being executed) 进程(process&am…

《爱的四十条法则》

《爱的四十条法则》 [土]艾丽芙沙法克 作者用别样的手法间接向我们阐述了爱的四十条法则,每一条都会触及不同阶段的灵魂,我仅将文中感触较深的摘录如下: 1.尽管有人这样说,但是爱绝对不是来的快,去的也快的甜蜜感觉而…

长尾分布系列论文解析(二)Delving into Deep Imbalanced Regression

大纲引言回归问题中的长尾分布LDSFDS实验和结果总结引言 本文是长尾分布系列论文解析的第二篇,前情提要详见长尾分布系列论文解析(一)Decoupling Representation and Classifier for Long-Tailed Recognition,本篇要介绍的是回归任…

弹性力学之边界条件

作者:张伟伟,来源:力学酒吧 弹性力学基本方程包括平衡方程、几何方程和广义胡克定律,其中平衡方程和几何方程都属于微分方程。我们知道,在求解微分方程时,会出现积分常数,只有确定了积分常数&a…

JS —— js中的节流与防抖

文章目录 前言一、节流 1.什么是节流2.做节流可解决什么问题3.如何做节流二、防抖 1.什么是防抖2.做防抖可解决什么问题3.如何做防抖总结前言 最近有同学问到节流与防抖的相关知识点,于是乎,四处查资料,找一找,看一看&#xff0c…

单元测试:会变化的定义

有一种东西, 如果它太小,需要付出的努力就太大;如果它太大,就很难测试。 没错!它是单元。 但是什么才是一个好的单元定义呢?为什么它如此重要? 单元的定义对测试过程有很大的影响,但同时单元的定义也是不…

Transformer总结和梳理

Transformer总结和梳理Positional encodingSelf-attentionMulti--head-attentionAdd&NormAdd操作Norm操作FeedForwardMASKPadding MaskedSelf-Attention Masked首先来看一下Transformer结构的结构:Transformer是由Encoder和Decoder两大部分组成,首先…

mysql安装与配置及四大引擎和数据类型、建表以及约束、增删改查、常用函数、聚合函数以及合并

目录 一.mysql安装与配置 1.mysql简介 2.mysql 安装 安装MySQL(8.0的版本) 安装MySQL(5.7的版本) 删除MySQL(这是5.5版本的卸载方式) 3.命令行登陆及权限修改 一.启动方式 二.停止 三.重启 wind…