【MyBatis】进阶使用 (动态SQL)

动态SQL

在填写表单时,有些数据是非必填字段(例如性别,年龄等字段),那就需要在接收到参数时判断,根据参数具体的情况来生成相应的 SQL,如果参数不为 null,就插入到数据里,如果参数为 null,就根据具体表设计而定。

<if>

使用 <if> 标签可以完成对接收到的参数进行判断。

首先看一组都不为空的情况下:

再看当性别为 null 的情况:

此时我们就需要使用 <if> 标签对接收到的参数进行判断,如果不为空,就加入到数据库:

而数据库也能正常插入数据:

<trim>

上述只判断了一个字段 gender,如果有更多的字段则需要使用多个 <if> 标签:

若字段 phone 为 null,则会出现下面这个情况:

此时,我们就需要 <trim> 标签了,用来去除不必要的 逗号:

在 <trim> 标签里还有两个配置,prefix 和 suffix,一个用于补全前缀,一个用于补全后缀:

<where>

<where> 标签用来去除判断条件里的 and 和 or,若筛选条件都为 null,则会去除 where 关键字。

当两个条件都不为 null 时:

当其中一个判断条件为 null 时:

当判断条件全为 null 时:

<set>

<set> 标签也常用于去除逗号,如果接受到的参数不为 null,则更新数据。

当参数都不为 null 时:

其中一个为 null 时:

参数都为 null 时:

<foreach>

用于对集合进行遍历。

collection 为方法中的集合
item 为集合中的每个对象
open 为语句块开头的字符串
close 则为语句块结束的字符串
separate 为每次遍历之间间隔的字符串

<include>

在编写 SQL 语句时,可能会存在重复的语句, 为解决这个现象,可以使用 <sql> 标签对相同语句进行封装,再使用 <include> 标签进行引用。

相关推荐
隔窗听雨眠1 小时前
Oracle误Truncate操作恢复:从原理到实战的完整指南
数据库·oracle
Lethehong1 小时前
MySQL迁移如何做到零改造?四层兼容方案详解
数据库·mysql·adb
Json____2 小时前
五金制品行业-企业官网源码
java·大数据·数据库·企业站·wwwoop.com
深念Y3 小时前
Opencode Event 表写入优化方案
数据库·人工智能·ai·node.js·bug·优化·opencode
竹枝溪4 小时前
MySQL进阶:约束、多表设计、多表查询与事务
java·数据库·mysql·事务·子查询·acid·多表查询
weixin_431600444 小时前
NestJS 入门(9):连上数据库,SQL 写在哪?
数据库·后端·sql·学习·nest.js
roman_日积跬步-终至千里4 小时前
【Spark与SQL网关(1)】Spark 提交模式与 Spark Thrift Server:到底在“提交”什么
大数据·sql·spark
math_hongfan5 小时前
一对多的数据库姻缘:ArkTS 为鸿蒙订单设计外键与明细表
数据库·华为·harmonyos
杰夫(简道云个人搭建)5 小时前
SAAS系统应该先解决业务问题,再优化体验
数据库·人工智能·低代码·excel·个人开发
城管不管5 小时前
MySQL 慢查询完整排查
java·服务器·jvm·数据库·mysql·spring·面试