动态 SQL

动态 SQL 是 MyBatis 的强大特性之一,能够完成不同条件下不同的 sql 拼接。也就是说执行的 SQL 语句并不是固定的,而是不同人的不同操作执行的语句会有所差异。MyBatis 通过使用 标签 的方式来实现这种灵活性的。

<if>标签

例如在有一些网站进行注册的时候,会要求必须输入邮箱、密码,而那些年龄性别什么的则并不是必填项。这种场景下往数据库插入就可以使用 <if> 标签来实现。

UserMapper:

java 复制代码
int addUser2(UserEntity user);

UserMapper.xml:

XML 复制代码
    <insert id="addUser2">
        insert into userinfo(username,
                             <if test="photo != null">
                                 photo,
                             </if>
                             password) values (#{username},
                                               <if test="photo != null">
                                                   #{photo},
                                               </if>
                                               #{password})
    </insert>

单元测试 验证:

添加 photo 属性:

不添加 photo 属性:

<trim>标签

**prefix:**前缀,如果后面有东西不为空就加上
suffix: 后缀,如果后面有东西不为空就加上
prefixOverrides: 要去除掉的前缀,如果存在的话
suffixOverrides: 要去除掉的后缀,如果存在的话

假设现在有种情况:全部数据都是非必传的,其中有一个数据传过来了,但是后面没数据就会导致 SQL 语句中多出来了一个 , 逗号就会导致报错。

为了解决这一问题就可以使用 <trim> 标签。这相当于是完善了 <if> 标签存在的不足。

<where> 标签

假设现在需要使用 where 条件进行对 id 或者 title 进行文章查询,使用 <trim> 标签实现:

使用 <where> 标签可以更加简单地表示(更加优雅的方式):

<set>标签

用在 update 修改操作里面的,跟 <where> 的使用一样,如果不传的话就不会生成,但是没有 set 的 update 是一个错误的 sql 语句,程序会报错。

<foreach>标签

**collection:**绑定⽅法参数中的集合,即表示需要 foreach 的是谁
item: 遍历时的每⼀个对象,每次循环的是什么
open: 语句块开头的字符串
close: 语句块结束的字符串
separator: 每次遍历之间间隔的字符串

当需要批量进行 添加、删除、修改 数据库的时候使用。下面是根据文章 id 来删除文章:

相关推荐
Decay__4 小时前
05_MySQL 常用 SQL 大全 —— 诊断、管理、优化辅助 SQL 与三大系统库速查
运维·数据库·sql·mysql·架构
学长毕设6 小时前
基于SpringBoot的实验室资产管理系统
java·spring boot·后端
zzu123zsw7 小时前
从臃肿的模板调用到声明式契约:深入 UniHttp 动态代理与多渠道生命周期扩展
java·spring boot·microsoft·unihttp
小徐不徐说8 小时前
C++ 接口与插件设计:从工厂注册到 Qt 动态插件
数据库·c++·qt·系统架构·程序设计
源码集结号8 小时前
云诊所门诊系统源码,基于SpringBoot+Vue.js架构,支持多租户设计与Docker容器化部署
java·spring boot·源码·医院信息系统·门诊系统·诊所系统
论文复现现场9 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算
啃瓜子的松鼠9 小时前
泛微OAe9-后端二开异步调用
java
Decay__9 小时前
04_MySQL DBA 日常运维手册 —— 会话管理、锁与阻塞、事务监控、慢查询与日志巡检
运维·数据库·sql·mysql·架构
秋天的怀念_David10 小时前
第二十一夜 · 数字黑洞与西西弗斯的惩罚
java·程序人生·算法
外收内放10 小时前
Python基础语法练习题(73)
java·前端·python