SpringBoot(mybatis :foreach标签)

本文详细介绍了MyBatis的foreach标签在构建SQL条件语句和批量操作中的应用,包括collection、item、open、close、separator和index等属性的用法。同时,解释了AOP注解@Aspect和@Around的作用,强调了@Around在织入增强处理时的灵活性和注意事项。

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

一、mybatis foreach标签的使用

mybatis的foreach标签经常用于遍历集合,构建in条件语句或者批量操作语句。

1.collection:使用@Param(“list”) 注解
在这里插入图片描述
2.item:表示本次迭代获取的元素,若collection为List、Set或者数组,则表示其中的元素;若collection为map,则代表key-value的value,该参数为必选
3.open:表示该语句以什么开始,最常用的是左括弧’(’,注意:mybatis会将该字符拼接到整体的sql语句之前,并且只拼接一次,该参数为可选项
4.close:表示该语句以什么结束,最常用的是右括弧’)’,注意:mybatis会将该字符拼接到整体的sql语句之后,该参数为可选项
5.separator:mybatis会在每次迭代后给sql语句append上separator属性指定的字符,该参数为可选项
6.index:在list、Set和数组中,index表示当前迭代的位置,在map中,index代指是元素的key,该参数是可选项。

假设接口中传递的list如下所示:

List<String> list = new ArrayList<>();
list.add("zhangsan");
list.add("lisi");
list.add("wangwu");

其中foreach标签配置如下:

<foreach collection="list" item="item" separator=",">
		(#{item})
</foreach>

可以看到的是foreach标签指定了逗号作为分隔符,那么mybatis将会解析出foreach标签里面的内容作为一个整体然后再其后面拼接上逗号分隔符,拼接后的过程如下所示:

('zhangsan')   			          //第一步,迭代集合,获取对应的item,和外部的(),拼接形成('zhangsan')
('zhangsan'),				          //第二步,在之前的基础上拼接上逗号分隔符
('zhangsan'),('lisi')              //第三步,继续迭代
('zhangsan'),('lisi'),             //第四步,拼接逗号分隔符
('zhangsan'),('lisi'),('wangwu')  //第五步,迭代集合并拼接,到此迭代结束

最终的结果为
(‘zhangsan’),(‘lisi’),(‘wangwu’)
数据库的批量增加也可以使用foreach:

在foreach标签前面加上insert into table values,将会变形成

INSERT INTO user(user_name) VALUES(‘zhangsan’),(‘lisi’),(‘wangwu’)

<foreach collection="list" item="item" open="(" separator="," close=")">
		#{item}
</foreach>

二、AOP注解

1.@Aspect

切面类 @Aspect: 定义切面类,加上@Aspect、@Component注解;

2.@Around

既可以在目标方法之前织入增强动作,也可以在执行目标方法之后织入增强动作;
可以决定目标方法在什么时候执行,如何执行,甚至可以完全阻止目标目标方法的执行;
可以改变执行目标方法的参数值,也可以改变执行目标方法之后的返回值; 当需要改变目标方法的返回值时,只能使用Around方法;
虽然Around功能强大,但通常需要在线程安全的环境下使用。因此,如果使用普通的Before、AfterReturing增强方法就可以解决的事情,就没有必要使用Around增强处理了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值