mybatis动态SQL

本文介绍了MyBatis中的几种动态SQL标签,如if用于条件判断,where用于动态拼接查询条件,choose、when、otherwise实现选择性执行,set处理更新操作,foreach进行集合迭代,以及sql片段和trim标签的使用,用于代码复用和优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

if标签语句示例:

if标签会执行所有的if标签,并进行条件判断,满足的部分进行sql拼接

where标签语句示例:

动态拼接where(并且会智能的去掉第一个语句的and或者or)

choose,when,otherwise标签语句示例:

不会执行所有的when语句,遇到满足的条件,后面的when语句不会执行,otherwise可以不写

set 标签语句示例:

用于更新操作(并且会智能的去掉最后一个语句后面的逗号)

foreach 标签语句示例:

collection 表示迭代集合的名称,可以使用@Param注解指定,如下所示 该参数为必选

item 表示本次迭代获取的元素,若collection为List、Set或者数组,则表示其中的元素; 若collection为map,则代表key-value的value,该参数为必选

open 表示该语句以什么开始,最常用的是左括弧’(’,注意:mybatis会将该字符拼接到整体的sql语句之前,并且只拼接一次,该参数为可选项

close 表示该语句以什么结束,最常用的是右括弧’)’,注意:mybatis会将该字符拼接到整体的sql语句之后,该参数为可选项

separator mybatis会在每次迭代后给sql语句append上separator属性指定的字符,该参数为可选项

index 在list、Set和数组中,index表示当前迭代的位置,在map中,index代指是元素的key,该参数是可选项。

sql片段标签语句示例:

在mapper.xml中有些sql片段,在多个sql语句中都有用,每个都写的话显得代码冗余,可以用到代码片段,将公共部分抽取出来

注意点:最好基于单表定义sql片段,并且sql片段中不要存在where标签,因为where标签会自动优化sql中的and和or

trim标签语句示例:

trim标记是一个格式化的标记,可以完成set或者是where标记的功能

①用 trim 改写上面的 if+where 语句

prefix:前缀

prefixoverride:去掉第一个and或者是or

②用 trim 改写上面的 if+set 语句

suffix:后缀

suffixoverride:去掉最后一个逗号(也可以是其他的标记,就像是上面前缀中的and一样)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值