动态SQL使用【JavaEE】

news2024/12/23 3:15:47

动态SQL使用

1. if 标签

判断一个参数是否有值,如果没值,那么就会隐藏 if 中的 sql

语法:

<if test="username!=null">
 username==#{username}
</if>

表达式:username 的参数是否为空

如果结果为 true,那么拼接的 SQL 就会加上 username=#{username},

如果结果为false,那么 if 标签中的 SQL 就会被省略

在这里插入图片描述

2. trim 标签

最主要的作用:去除 SQL 语句前后多余的某个字段

标签属性:

  • prefix:表示整个语句块,以prefix的值作为前缀
  • suffix:表示整个语句块,以suffix的值作为后缀
  • prefixOverrides:表示整个语句块要去除掉的前缀
  • suffixOverrides:表示整个语句块要去除掉的后缀
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="xxx">
...
</if>
</trim>

在这里插入图片描述

3. where 标签

主要作用:实现查询中的 where 替换

<!-- 根据 id 查询用户 -->
 <select id="getUserById" resultMap="BaseMap">
     select * from userinfo
     <where>
         <if test="id!=null">
             id=#{id}
         </if>
         <if test="name!=null">
             and username=#{name}
         </if>
     </where>
 </select>

where 中的所有参数都为空,那么 where 的 sql 就不会生产

可以去除掉最前面的 and 标签

以上<where>标签也可以使用 <trim prefix="where" prefixOverrides="and">替换

4. set标签

主要作用:进行修改操作时,配合 if 来处理非必传传输,特点是会自动去除最后一个英文逗号。

<update id="updateById" parameterType="org.example.model.User">
 update user
 <set>
 <if test="username != null">
 username=#{username},
 </if>
 <if test="password != null">
 password=#{password},
 </if>
 <if test="nickname != null">
 nickname=#{nickname},
 </if>
 <if test="sex != null">
 sex=#{sex},
 </if>
 <if test="birthday != null">
 birthday=#{birthday},
 </if>
 <if test="head != null">
 head=#{head},
 </if>
 <if test="createTime != null">
 create_time=#{createTime},
 </if>
 </set>
 where id=#{id}
</update>

set标签中如果所有参数都是非必传,set会将这些语句隐藏,所有标签都使用逗号也没有问题,set会将逗号去掉(如果传一个值的话逗号会存在)。

以上<set>标签也可以使用 <trim prefix="set" prefixOverrides=",">替换

5. foreach 标签

主要作用:对集合进行循环。

对集合进⾏遍历时可以使⽤该标签。标签有如下属性:

  • collection:绑定⽅法参数中的集合,如 List,Set,Map或数组对象
  • item:遍历时的每⼀个对象
  • open:语句块开头的字符串
  • close:语句块结束的字符串
  • separator:每次遍历之间间隔的字符串
<delete id="deleteByIds">
 delete from article
 where id in
 <foreach collection="list" item="item" open="(" close=")" separator=","
>
 #{item}
 </foreach>
</delete>

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

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

相关文章

minio前后端分离上传视频/上传大文件——前后端分离断点续传minio分片上传实现

&#x1f340;&#x1f340;&#x1f340;&#x1f340;分布式文件系统-minio&#xff1a; 第一章&#xff1a;分布式文件系统介绍与minio介绍与使用&#xff08;附minio java client 使用&#xff09;第二章&#xff1a;minio&前后端分离上传视频/上传大文件——前后端分离…

网络协议(六):网络层

网络协议系列文章 网络协议(一)&#xff1a;基本概念、计算机之间的连接方式 网络协议(二)&#xff1a;MAC地址、IP地址、子网掩码、子网和超网 网络协议(三)&#xff1a;路由器原理及数据包传输过程 网络协议(四)&#xff1a;网络分类、ISP、上网方式、公网私网、NAT 网络…

【Spark分布式内存计算框架——Spark Core】10. Spark 内核调度(中)

8.3 Spark Shuffle 首先回顾MapReduce框架中Shuffle过程&#xff0c;整体流程图如下 Spark在DAG调度阶段会将一个Job划分为多个Stage&#xff0c;上游Stage做map工作&#xff0c;下游Stage做reduce工作&#xff0c;其本质上还是MapReduce计算框架。Shuffle是连接map和reduce之…

全国空气质量排行,云贵川和西藏新疆等地空气质量更好

哈喽&#xff0c;大家好&#xff0c;春节刚刚过去&#xff0c;不知道大家是不是都开始进入工作状态了呢&#xff1f;春节期间&#xff0c;允许燃放烟花爆竹的地区的朋友们不知道都去欣赏烟花表演没有&#xff1f;其他地区的朋友们相比烟花表演可能更关心燃放烟花爆竹造成的环境…

浅谈前端设计模式:策略模式和状态模式的异同点

一、策略模式 策略模式是定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。 而且策略模式是重构小能力&#xff0c;特别适合拆分“胖逻辑”。 这个定义乍一看会有点懵&#xff0c;不过通过下面的例子就能慢慢理解它的意思。 先来看一个真实场景 某次活动要做…

测试2年还拿实习生的薪资打发我,你后悔去吧····

20年7月大学毕业&#xff0c;学的计算机科学专业。因为考研之后&#xff0c;秋招结束了。没什么更多的岗位选择&#xff0c;就想找个工作先干着&#xff0c;然后亲戚在一家大厂公司上班说要招测试&#xff0c;所以就来做测试了。 虽然都是属于计算机大类&#xff0c;但自己专业…

记一次 .NET 某游戏网站 CPU爆高分析

一&#xff1a;背景 1. 讲故事 这段时间经常有朋友微信上问我这个真实案例分析连载怎么不往下续了&#xff0c;关注我的朋友应该知道&#xff0c;我近二个月在研究 SQLSERVER&#xff0c;也写了十多篇文章&#xff0c;为什么要研究这东西呢&#xff1f; 是因为在 dump 中发现…

零入门kubernetes网络实战-13->同一宿主机上的两个网络命名空间通信方案

《零入门kubernetes网络实战》视频专栏地址 https://www.ixigua.com/7193641905282875942 本篇文章视频地址(稍后上传) 本篇文章主要是想模拟一下&#xff0c;在同一个宿主机上&#xff0c;多个网络命名空间之间如何通信&#xff1f; 有哪些可以采取的方案。 可能存在的方案…

【GD32F427开发板试用】6. 定时器运用之精确定时1s

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动&#xff0c;更多开发板试用活动请关注极术社区网站。作者&#xff1a;hehung 之前发帖 【GD32F427开发板试用】1. 串口实现scanf输入控制LED 【GD32F427开发板试用】2. RT-Thread标准版移植 【GD32F427开发板试用…

MySQL:连explain的type类型都没搞清楚,怎敢说精通SQL优化?

我们在使用SQL语句查询表数据时&#xff0c;提前用explain进行语句分析是一个非常好的习惯。通过explain输出sql的详细执行信息&#xff0c;就可以针对性的进行sql优化。 今天我们来分析一下&#xff0c;在explain中11种不同type代表的含义以及其应用场景。 1&#xff0c;sys…

如何在dom节点上使用fixed定位?实现基于父节点而不是浏览器的滚动定位?一眼看懂,简单明了。

文章目录一、想要实现的功能场景二、父相子绝方式实现dom节点内元素滚动定位2.1、父相子绝代码2.2、实现效果三、iframe中使用fixed方式实现3.1、fixed代码3.2、实现效果四、总结一、想要实现的功能场景 想在一个node节点中实现滚动&#xff0c;但是我的文本要基于这个元素在滚…

云计算关键技术

在云计算数据中心的构建过程中&#xff0c;离不开一些关键的技术&#xff0c;比如&#xff0c;虚拟化技术&#xff0c;分布式数据存储技术&#xff0c;云计算平台管理软件以及其它诸如HBase&#xff0c;Hadoop等相关技术。目录 虚拟化技术 计算虚拟化技术-KVM 分布式数据存储技…

基于 YAML 接口自动化测试框架设计

在设计自动化测试框架的时候&#xff0c;我们会经常将测试数据保存在外部的文件&#xff08;如Excel、YAML、CSV&#xff09;&#xff0c;或者数据库中&#xff0c;实现脚本与数据解耦&#xff0c;方便后期维护。目前非常多的自动化测试框架采用通过Excel或者YAML文件直接编写测…

Allegro如何设置自动保存和自动保存的时间操作指导

Allegro如何设置自动保存和自动保存的时间操作指导 做PCB设计的时候,自动保存软件是一个必要的功能,Allegro同样支持设置自动保存,而且可以设置自动保存的时间。 如下图 具体操作如下 点击Setup点击User Preferences

都说高速信号过孔尽量少,高速先生却说有时候多点反而好?

作者&#xff1a;一博科技高速先生成员 黄刚过孔在高速领域可谓让硬件工程师&#xff0c;PCB设计工程师甚至仿真工程师都闻风丧胆&#xff0c;首先是因为它的阻抗没法像传输线一样&#xff0c;通过一些阻抗计算软件来得到&#xff0c;一般来说只能通过3D仿真来确定&#xff0c;…

二叉树的性质与推导及常见习题整理

目录 一、性质推导 二、常见的二叉树性质习题 1. 某二叉树共有 399 个结点&#xff0c;其中有 199 个度为 2 的结点&#xff0c;则该二叉树中的叶子结点数为&#xff08;&#xff09;。 2.在具有 2n 个结点的完全二叉树中&#xff0c;叶子结点个数为&#xff08;&#xff…

字母板上的路径[提取公共代码,提高复用率]

提取公共代码前言一、字母版上的路径二、贪心1、idea2、go3、代码不断拆分复用的过程总结参考文献前言 写代码&#xff0c;在提高效率的同时&#xff0c;要方便人看&#xff0c;这个人包括自己。大函数要拆分成一些小函数&#xff0c;让每个函数的宏观目的和步骤都显得清晰&am…

分享微信点餐小程序搭建步骤_微信点餐功能怎么做

线下餐饮实体店都开始摸索发展网上订餐服务。最多人选择的是入驻外卖平台&#xff0c;但抽成高&#xff0c;推广还要另买流量等问题&#xff0c;也让不少商家入不敷出。在这种情况下&#xff0c;建立自己的微信订餐小程序&#xff0c;做自己的私域流量是另一种捷径。那么&#…

分类模型评估:混淆矩阵、准确率、召回率、ROC

1. 混淆矩阵 在二分类问题中&#xff0c;混淆矩阵被用来度量模型的准确率。因为在二分类问题中单一样本的预测结果只有Yes or No&#xff0c;即&#xff1a;真或者假两种结果&#xff0c;所以全体样本的经二分类模型处理后&#xff0c;处理结果不外乎四种情况&#xff0c;每种…

反应-扩散方程(Reaction-diffusion system)

文章目录单组分反应-扩散方程双组分反应-扩散方程三组分和更多组分的反应-扩散方程Fishers equationKPP方程Belousov–Zhabotinsky reaction历史化学机理变体Noise-induced order数学背景Briggs–Rauscher reactionZFK equation行波解渐近解外部区域内部区域KPP-ZFK 转变Clavin…