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

相关推荐
fen_fen4 分钟前
SqlServer新增schema和用户的命令
数据库·sqlserver
SimonKing5 分钟前
基于Netty的WebSocket自动解决拆包粘包问题
java·后端·程序员
程序员欣宸6 分钟前
LangChain4j实战之十四:函数调用,高级API版本
java·ai·langchain4j
别在内卷了6 分钟前
三步搞定:双指针归并法求两个有序数组的中位数(Java 实现)
java·开发语言·学习·算法
小蜗的房子7 分钟前
Oracle 19c RAC重建AWR步骤详解
linux·运维·数据库·sql·oracle·操作系统·oracle rac
码头整点薯条10 分钟前
License 集成 Spring Gateway:解决 WebFlux 非阻塞与 Spring MVC Servlet 阻塞兼容问题
java·spring
白露与泡影12 分钟前
Spring 的西西弗斯之石:理解 BeanFactory、FactoryBean 与 ObjectFactory
java·后端·spring
忧郁的Mr.Li12 分钟前
Spring+Mybatis配置自定义线程事务管理
java·spring·mybatis
小宇的天下14 分钟前
Calibre 3Dstack --每日一个命令day12【density】(3-12)
服务器·数据库·windows
Hacker_seagull20 分钟前
Java 8安装详细教程
java·开发语言