概述
项目使用过程中,有很多地方需要用到批量删除、批量插入、批量更新、批量查询,这样的需求就会用到mybatis中的foreach标签
foreach的属性
- item:集合中元素迭代时的别名,必填
- index:在list和array中,index是元素的序号;在map中,index是元素的key,可选
- open:foreach代码的开始符号,一般是
'('
并和')'
合用,常用在in(),values()时,可选 - separator:元素之间的分隔符,可选
- close:foreach代码的关闭符号,一般是
'('
并和')'
合用,常用在in(),values()时,可选 - collection:foreach迭代的对象,作为入参时,List对象默认用list代替,数组对象用array代替。Map对象没有默认的键。同时可以在作为入参时使用@param(“xxx”)来设置键,默认的list、array将会失效。
列表配置
选择mybatis
类型,然后编写script脚本
温馨说明: 前端数组传到服务端进行转换。两个下划线__
是双下滑
前端查询请求参数:
"A5" : [ "543", "544" ]
后端经过处理参数:
"A5" : "543,544",
"A5__0" : "543",
"A5__1" : "544",
"A5__origin" : [ "543", "544" ]
使用mybatis进行开发时,在一个SQL语句中需要拼接list的大小。如果需要遍历list,那么先对list进行非空判断的时候。
<if test="A5__origin != null and A5__origin.size != 0" >
脚本参考
批量查询(举例)
<script>
SELECT ATTA_ID , FILE_PATH ,A5 FROM SS_SYS_ATTACHMENT WHERE 1=1
<if test="A5__origin != null and A5__origin.size != 0" >
AND A5 IN
<foreach collection="A5__origin" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
</script>
或者
<script>
SELECT ATTA_ID , FILE_PATH ,A5 FROM SS_SYS_ATTACHMENT WHERE 1=1 AND A5 IN
<foreach collection="A5__origin" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</script>
批量新增(举例)
<script>
insert into user_info
(user_id,user_name,create_id, create_time)
values
<foreach collection="A5__origin" index="index" item="item" separator=",">
(#{item.userId,jdbcType=VARCHAR}, #{item.userName,jdbcType=VARCHAR},
#{item.createId,jdbcType=BIGINT}, #{item.createTimee,jdbcType=TIMESTAMP})
</foreach>
</script>
批量更新(举例)
<script>
update ss_sys_file set IS_DELETE='1'
where id in
<foreach collection="A5__origin" index="index" item="item" separator="," open="(" close=")">
#{item,jdbcType=VARCHAR}
</foreach>
</script>
✨ 批量获取(举例)
-
ds2用ds1值查询
-
原因
因为ds2里面CHECK_NAME是使用的是ds1.CHECK_NAME,所有先再配置里面字段配置默认值为{{ds1.CHECK_NAME}}
由于,ds2里面使用自定义mybitis脚本,所有需要去识别判断,服务端识别到这个默认值后,获取ds1下面的对象CHECK_NAME值,然后把key转换,value获取,例如:
key: 由【ds1.CHECK_NAME】转换,譬如:【ds1__CHECK_NAME】
value: 取【ds1.CHECK_NAME】获取,譬如:【任务名称,测试】
- 解决
<if test="{{ds1.CHECK_NAME}} != null">
or CHECK_NAME in
<foreach collection="ds1__CHECK_NAME" index="index" item="item" separator="," open="(" close=")">
#{item,jdbcType=VARCHAR}
</foreach>
</if>
接口请求
访问地址:http://localhost/api/form/query?ID=6668
请求参数:
{
"ds1": {"A5": ["543", "544"]}
}
查询结果:
{
"data": {
"ds1": {
"data": [
{
"ATTA_ID": "626ef427-c62a-4b43-a474-41fbbd3e42c7",
"A5": "5432",
"FILE_PATH": "/upload/2022-05-09/5432.jpg"
},
{
"ATTA_ID": "b411135b-5708-7714-8b93-40c0958c2ec8",
"A5": "5441",
"FILE_PATH": "/upload/2022-05-09/5441.jpg"
}
],
"paging": {
"pageIndex": 0,
"pageSize": 0,
"totalPage": 0,
"totalRecord": 0
},
"total": 0,
"error_info": {}
}
},
"message": "",
"paging": null,
"schema": null,
"success": true,
"timestamp": 1617953697587
}
官方文档
动态SQL直通车
- if
- choose (when, otherwise)
- trim (where, set)
- foreach
其他文档
- mybatis动态sql
- mybatis动态sql
最后
以上就是闪闪毛巾为你收集整理的【mybatis】标签foreach数组批量执行操作的全部内容,希望文章能够帮你解决【mybatis】标签foreach数组批量执行操作所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复