mybatis foreach标签的使用
mybatis的foreach标签经常用于遍历集合,构建in条件语句或者批量操作语句。
下面是foreach标签的各个属性
属性 | 描述 |
---|---|
collection | 表示迭代集合的名称,可以使用@Param注解指定,如下图所示,如果没有用param指定,则表示集合的类型,list,array,map |
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,该参数是可选项 |
假设接口中传递的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')
这种形式一般用于数据库的批量增加。
果将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实体类如下:
mybatis foreach标签的使用相关推荐
- MyBatis foreach 标签常用方法总结
一.前言 在 MyBatis 中,常常会遇到集合类型的参数,虽然我们可以通过 OGNL 表达式来访问集合的某一个元素,但是 OGNL 表达式无法遍历集合.foreach 标签就是专门用来解决这类问 ...
- mybatis foreach标签拼接多字段in ,和union
mybatis for标签 手写肯定是不可能,复制又经常忘记哪里有,记录一下复制方便 (oracle数据库) 批量添加 ,修改 ,拼接(xx,xx)in , union 添加,修改: <fore ...
- MyBatis Foreach标签
关于之前的trim标签 其作用在于可以自定义一个标签用于覆盖除去特定的字符 就如where标签 可以对and|or进行除去. 以下是sql片段 主要是利用<sql>标签: 将之前的动态sq ...
- mybatis where、set、trim、sql、foreach标签的使用
mybatis where标签的使用 where后面跟查询条件 简化sql语句中判断条件的书写 例: <select id="user" parameterType=&quo ...
- Mybatis系列:解决foreach标签内list为空的问题
我把之前发布在简书的两篇文章通过拦截器Interceptor优化Mybatis的in查询 和Mybatis中foreach标签内list为空的解决方案进行了整合,整理为本文的内容.此外,我还对代码部分 ...
- 框架:mybatis常用标签(refid、foreach、trim)
1.mybatis中refid是什么意思 1.首先定义一个sql标签,一定要定义唯一id <sql id="Base_Column_List" >name,age< ...
- 【MyBatis框架】mapper配置文件-foreach标签
foreach标签 下面介绍一下一个mapper配置文件中的foreach标签(注意,要跟着前面的总结来看,这里使用的例子是结合前面的工程写的,大部分代码没有再赘述) foreach的作用是向sql传 ...
- Mybatis之foreach标签
Mybatis之foreach标签 案例:通过foreach标签实现如下sql查询,并在测试类中传入参数: select * from mybatis.blog where id in=(1 or 2 ...
- MyBatis学习——foreach标签的使用
一.foreach标签属性解读 MyBatis的foreach标签应用于多参数的交互如:多参数(相同参数)查询.循环插入数据等,foreach标签包含collection.item.open.clos ...
- Mybatis动态sql中的foreach标签的使用
foreach 标签一般用于遍历集合,构建in条件语句或者批量操作语句 <insert id="batchSave" parameterType="java.uti ...
最新文章
- 推荐一款非常好用的java反编译工具(转)
- start与run的区别
- poj 2777(线段树+区间染色)
- 【机器学习基础】xgboost系列丨xgboost建树过程分析及代码实现
- Django的信号机制详解
- vuex 在非组件中调用 mutations 方法
- HarmonyOS 2.0:正式开源,年底面向开发者发布智能手机 Beta 版本
- 谈谈我们的学习和我们的Blog
- Python 语言程序设计(3-1)字符串处理函数和相关功能
- iOS 常用到的宏#define
- (六)ModelSim 下载安装以及crack的注册
- tcp 三次握手和四次断连深入分析:连接状态和socket API的关系----BAT 李运华
- c语言-厘米换算英尺英寸
- the little schemer 学习
- (二) CGAL库应用:轮廓中轴骨架生成create_interior_straight_skeleton_2()及轮廓的偏置create_offset_polygons_2()
- On-Premise
- Android 点九图 .9图
- 什么是等级保护?等保二级和三级的区别?
- Android RecyclerView设置paddingBottom,scrollbars跟随滑动到底部
- 半导体|台积电今年上半年营收达1016亿元 同比减少4.5%
热门文章
- linux 字符驱动 tty,打通linux的tty驱动的数据链路
- ubuntu mysql双主热备配置_mysql学习:mysql双主热备+lvs+keepalived配置
- OpenCV对图片的读写,像素值的访问,修改
- 翻译: 3.7. Softmax 回归的简明实现 pytorch
- Layout anchors徒手写AutoLayout Swift
- Sourcetree 看不了文件内容 Diff was suppressed because of file size or pattern
- OperationQueue与属性maxConcurrentOperationCount的那些事
- linux build bash,Win10 Build 14316启用Linux Bash 环境图文教程
- 使用案例_Excel中LOOKUP函数的使用案例
- php_eol为什么没有换行,PHP PHP_EOL 换行符