mybatis 使⽤foreach 标签批量更新数据
属性描述
collection
表⽰迭代集合的名称,可以使⽤@Param注解指定,如下图所⽰,该参数为必选
item 表⽰本次迭代获取的元素,若collection为List、Set或者数组,则表⽰其中的元素;若collection为map,则代表
key-value的value,该参数为必选
open 表⽰该语句以什么开始,最常⽤的是左括弧’(’,注意:mybatis会将该字符拼接到整体的sql语句之前,并且只拼接
⼀次,该参数为可选项
close 表⽰该语句以什么结束,最常⽤的是右括弧’)’,注意:mybatis会将该字符拼接到整体的sql语句之后,该参数为可
选项
批量更新sql语句separator mybatis会在每次迭代后给sql语句append上separator属性指定的字符,该参数为可选项,⼀般⽤于加个,
index 在list、Set和数组中,index表⽰当前迭代的位置,在map中,index代指是元素的key,该参数是可选项
今天领导安排了个批量插⼊数据的任务,就简单搞了⼀下,在此记录⼀下
先来说⼀下foreach标签⽤法
如果⼊参是list
/**
* 批量修改企业审批状态
*/
@Test
public void BatchModifyStatus() {
List<WaybillArea> waybillAreas = new ArrayList<WaybillArea>();
WaybillArea waybillArea01= new WaybillArea();
waybillArea01.setId(1);
waybillAreas.add(waybillArea01);
WaybillArea waybillArea02= new WaybillArea();
waybillArea02.setId(4);
waybillAreas.add(waybillArea02);
WaybillArea waybillArea03= new WaybillArea();
waybillArea03.setId(5);
waybillAreas.add(waybillArea03);
WaybillArea waybillArea04= new WaybillArea();
waybillArea04.setId(6);
waybillAreas.add(waybillArea04);
waybillOwnerService.batchModifyStatus(waybillAreas);
}
<!--批量修改企业审核状态-->
<update id="batchModifyStatus" parameterType="list">
update waybill_owner set owner_zt = CASE id
<foreach collection="list" item="item" >
WHEN #{item.id} THEN 5
</foreach>
END
<where>
id in
<foreach collection="list" item="item" open="(" separator="," close=")" >
#{item.id}
</foreach>
</where>
</update>
⼊参是list类型,系统遍历,collection="list"类型是list, item="item" 是每个对象,我取到对象在.出对象的属性。
第⼆个foreach 我还使⽤了open,separator,close ,省的⼿动加括号和,
打印sql如下
update waybill_owner set owner_zt = CASE id
WHEN 1 THEN 5
WHEN 4 THEN 5
WHEN 5 THEN 5
WHEN 6 THEN 5
END
WHERE id in ( 1 , 4 , 5 , 6 );
这个sql的意思是 更新waybill_owner表的owner_zt字段值,当这条数据的id等于1的时候,owner_zt的值更新为5,当这条数据的id等于4的时候,更新为5.。。。,where in 中是所有的id,即要更新数据的id,和when 后的值是对应的。
我是批量操作同样字段只是每条数据不⼀样,所以是这样表⽰。
即是将条件语句写在了⼀起。
这⾥的where部分不影响代码的执⾏,但是会提⾼sql执⾏的效率。
如果想要⼀次更新多个字段可以这样写
UPDATE waybill_owner SET
owner_code = CASE id
WHEN 4 THEN 1
WHEN 5 THEN 1
WHEN 6 THEN 1
END,
area = CASE id
WHEN 4 THEN 1
WHEN 5 THEN 1
WHEN 6 THEN 1
END
WHERE id IN (4,5,6)
更新waybill_owner表的owner_code和area字段
如果⼊参是map或者set类型
如果collection类型为map,则index代表key,item代表对应的value,可以这样进⾏批量插⼊
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论