MyBatis动态SQL标签的案例

embedded/2025/1/20 12:18:02/

1. 使用<if>进行条件查询

假设我们有一个用户表users,包含字段id, name, age。我们要根据名字和年龄来查找用户,但这两个条件都是可选的。

<select id="findUsers" parameterType="map" resultType="User">SELECT * FROM usersWHERE 1=1<if test="name != null">AND name = #{name}</if><if test="age != null">AND age = #{age}</if>
</select>

这里使用了1=1作为固定的where子句,以便后续可以方便地添加更多的条件而不需要担心是否要加AND

2. 使用<choose>, <when>, <otherwise>实现多条件选择

如果我们想要根据不同的条件选择不同的查询方式,比如按名字、年龄或者两者都查,我们可以这样写:

<select id="findUsersByCondition" parameterType="map" resultType="User">SELECT * FROM users<where><choose><when test="name != null">name = #{name}</when><when test="age != null">age = #{age}</when><otherwise>1=1</otherwise></choose></where>
</select>

3. 使用<foreach>处理集合参数

当我们需要构建一个包含多个值的IN语句时,例如查询多个ID对应的记录,可以使用<foreach>

<select id="findUsersByIds" parameterType="list" resultType="User">SELECT * FROM usersWHERE id IN<foreach item="id" index="index" collection="list"open="(" separator="," close=")">#{id}</foreach>
</select>

这里collection="list"指定了传入的是一个列表,item="id"是列表中每个元素的别名,openclose定义了包围符号,separator定义了分隔符。

4. 使用<set>更新记录

当执行update操作时,如果某些字段可能是null或不需要更新,可以使用<set>来动态生成SET子句:

<update id="updateUser" parameterType="User">UPDATE users<set><if test="name != null">name = #{name},</if><if test="age != null">age = #{age},</if></set>WHERE id = #{id}
</update>

请注意,<set>会自动移除最后多余的逗号。


http://www.ppmy.cn/embedded/155484.html

相关文章

今天你学C++了吗?——C++中的STL

♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨ 个…

嵌入式知识点总结(一)-C/C++关键字

针对于嵌入式软件杂乱的知识点总结起来&#xff0c;提供给读者学习复习对下述内容的强化。 目录 1.C语言宏中"#“和"##"的用法 1.1.(#)字符串化操作符 1.2.(##)符号连接操作符 2.关键字volatile有什么含意?并举出三个不同的例子? 2.1.并行设备的硬件寄存…

JavaScript 代码规范

JavaScript 代码规范 1. 引言 JavaScript 是一种广泛使用的编程语言,尤其在网页开发中占据重要地位。为了确保代码的质量、可读性和可维护性,遵循一套统一的代码规范至关重要。本规范旨在为 JavaScript 开发者提供一个清晰、一致的编码标准,以促进团队合作和代码共享。 2…

RocketMQ中的一些细节

1.前言 此文章是在儒猿课程中的学习笔记&#xff0c;感兴趣的想看原来的课程可以去咨询儒猿课堂《从0开始带你成为RocketMQ高手》&#xff0c;我本人觉得这个作者还是不错&#xff0c;都是从场景来进行分析&#xff0c;感觉还是挺适合我这种小白的。这块主要都是我自己的学习笔…

【QT】: 初识 QWidget 控件 | QWidget 核心属性(API) | qrc 文件

&#x1f525; 目录 1. 控件概述 控件体系的发展阶段 2. QWidget 核心属性 2.1 核心属性概览2.2 用件可用&#xff08;Enabled&#xff09; 2.3 坐标系&#xff08;Geometry&#xff09; **实例 1: 控制按钮的位置**实例 2: 表白 程序 2.4 窗口标题&#xff08;windowTiltle&a…

与“神”对话:Swift 语言在 2025 中的云霓之望

0. 引子 夜深人静&#xff0c;是一片极度沉醉的黑&#xff0c;这便于我与深沉的 macbook 悄悄隐秘于其中。一股异香袭来&#xff0c;恍惚着&#xff0c;撸码中身心极度疲惫、头脑昏沉的我仿佛感觉到了一束淡淡的微光轻洒在窗边。 我的对面若隐若现逐渐浮现出一个熟悉的身影。他…

栈与队列原理解析

13.3 栈的原理解析 13.3.1 栈的特性 ​ 只允许在一端进行插入或删除操作的线性表。 13.3.2 栈的基本操作 13.3.3 顺序存储实现栈 &#xff01;&#xff01;&#xff01; 一开始top-1,即链表为空的时候。top从0开始记元素&#xff0c;和数组一样。当top等于MaxSize-1时&#…

C++/C语言判断重复数组(zznu)⭐

问题描述 如果一个数组中不包含重复的元素&#xff0c;那么我们称这个数组是独ONE无TWO的数组。给定一个数组&#xff0c;请你判断这个数组是否是独ONE无TWO的。 输入 首先输入一个正整数n表示数组的长度&#xff08;0<n<100&#xff09;。 接下来输入n个整数&#xff08…