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

相关推荐
数据工匠老o3 小时前
异构数据库DDL同步:260条链路的结构变更自动适配方案
数据库·架构
const_qiu3 小时前
第四章 00:开篇 —— 从「会聊天」到「记得住、会干活、能协作」
java·开发语言·人工智能·python
Wang's Blog3 小时前
Java 项目实战: 交友项目 - 个人资料管理的更新接口实现与坑
java·开发语言·交友
Promising_GEO3 小时前
GEE实战02期:从卫星波段开始:利用 Sentinel-2 自己计算 NDVI
java·sentinel·遥感·空间分析
大文说跨境3 小时前
亚马逊多账号管理浏览器怎么选?云登/紫鸟/AdsPower 对比
java·前端·自动化
阿里云大数据AI技术4 小时前
StarRocks 与 Fluss 用一条 SQL 查实时与历史
人工智能·sql
CoderYanger4 小时前
Java EE 进阶:4.Spring Web MVC 入门(第一弹)
java·开发语言·前端·spring·面试·java-ee·mvc
这个DBA有点耶4 小时前
银行业市占率最高的国产数据库是谁?先搞清楚“市占率”的四种口径
数据库·程序员·架构
顽疲4 小时前
java springboot vue 养老系统源码详解:请假 care_leave 销假与床位停费日扣实践
java·vue.js·spring boot
XIAEE4 小时前
一个即时通讯项目是怎么长出来的:(Spring Boot 3 + Vue 3 微前端 + 悟空 IM + LiveKit)
java·spring