mybatis foreach标签的使用详解
作者:wt_better 时间:2023-05-07 21:12:09
mybatis的foreach标签经常用于遍历集合,构建in条件语句或者批量操作语句。
下面是foreach标签的各个属性
假设接口中传递的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标签前面加上insert into table values,将会变形成
INSERT INTO user(user_name) VALUES('zhangsan'),('lisi'),('wangwu')
1
这种形式一般用于数据库的批量增加。
如果将foreach配置修改如下,指定open属性为左括弧,close属性为右括弧:
<foreach collection="list" item="item" open="(" separator="," close=")">
#{item}
</foreach>
那么拼接的过程如下所示
( //第一步,拼接open指定的开始字符
('zhangsan' //第二步,迭代集合,拼接对应的item
('zhangsan', //第三步,拼接separator指定的分隔符
('zhangsan','lisi' //第四步,迭代集合,拼接对应的item
('zhangsan','lisi', //第五步,拼接separator指定的分隔符
('zhangsan','lisi','wangwu' //第六步,迭代集合,拼接对应的item
('zhangsan','lisi','wangwu') //第七步,拼接close指定的闭合字符
最终结果是:
('zhangsan','lisi','wangwu')
如果在foreach标签前面加上select … from table where … in ,将会变形成
SELECT * FROM user WHERE user_name in ('zhangsan','lisi','wangwu')
这种形式被用来构建in条件语句。
如果collection类型为map,则index代表key,item代表对应的value,可以这样进行批量插入:
其中Role实体类如下:
如果你想了解更多的关于mybaits标签的使用,请移步mybatis trim标签的使用
本文参考mybatis官方文档
来源:https://blog.csdn.net/wt_better/article/details/80941646
标签:mybatis,foreach标签
0
投稿
猜你喜欢
关于SpringMVC的异常处理机制详细解读
2023-01-26 17:32:45
C# 指针内存控制Marshal内存数据存储原理分析
2021-09-22 04:05:00
Java Hutool工具实现验证码生成及Excel文件的导入和导出
2023-02-04 22:49:32
Android游戏开发学习②焰火绽放效果实现方法
2023-10-26 08:54:53
Java Kafka分区发送及消费实战
2022-08-17 20:27:58
Java基于Swing实现的打猎射击游戏代码
2021-06-29 17:04:56
Android如何利用RecyclerView实现列表倒计时效果实例代码
2023-01-24 08:08:53
Android编程实现点击EditText之外的控件隐藏软键盘功能
2022-08-07 02:06:08
springboot 使用mybatis查询的示例代码
2022-03-30 03:19:09
Eclipse项目怎么导入IDEA并运行(超详细)
2021-11-15 06:51:41
Android Studio配置国内镜像源(利用hosts)
2023-05-29 18:47:54
c#中Invoke与BeginInvoke的用法及说明
2023-06-10 12:39:49
详解SpringMVC和MyBatis框架开发环境搭建和简单实用
2022-03-11 13:54:51
java使用Cookie判断用户登录情况的方法
2021-11-28 15:12:40
简单谈谈java中匿名内部类构造函数
2021-09-08 18:54:10
从字符串中截取等长字节的Java代码
2023-03-12 10:11:41
VisualStudio Community2019在安装的过程中无法进入安装界面的解决方法
2023-02-09 11:24:34
关于IDEA2020.1新建项目maven PKIX 报错问题解决方法
2023-12-26 14:04:44
SpringMVC的执行过程浅析
2021-05-31 20:51:11
Spring4整合Hibernate5详细步骤
2022-03-15 16:53:07