动态 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 来删除文章:

相关推荐
IT19954 小时前
Fail2Ban 防护 MySQL 实战|登录失败 3 次,IP 封禁 24 小时
数据库·mysql
夕除4 小时前
redis--IO 多路复用(select + poll)
数据库·sql
wangchunyu1146 小时前
JAVA CompletableFuture异步编程实战
java·开发语言·python
paopaokaka_luck7 小时前
流浪动物救助与收养系统(DeepSeek AI对话、 ECharts多维分析、救助流程衔接、领养与回访衔接、 捐赠确认与公示、志愿者协作)
java·前端·javascript·人工智能·mysql·echarts·推荐算法
Thomas.Sir7 小时前
第9课:SpringBoot4.x Web开发基础:WebMvc自动配置、静态资源、请求参数接收
java·spring boot
程序 代码狂人7 小时前
切片表与分区表的区别(数据开发面试版)
java·大数据·开发语言·数据仓库·算法
2501_944521598 小时前
Deepmerge 跨端三方库仓颉适配全流程
java·python·eclipse·github
lzhdim8 小时前
100条常用SQL语句
数据库·sql·mysql·mybatis
天河归来8 小时前
从原始消息到业务数据:三层数据架构的设计与实践
数据库·数据仓库·架构
数据库小学妹8 小时前
金融数据库成本怎么算?五笔钱加一张TCO表
数据库·金融行业·数据库选型·国产化替代·tco·金融数据库