批量更新
<update id="updateBatch" parameterType="java.util.List">
update t_item_priority
<trim prefix="set" suffixOverrides=",">
<trim prefix="item_random_score = case" suffix="end,">
<foreach collection="list" item="item" index="index">
when id=#{item.id} then #{item.item_random_score}
</foreach>
</trim>
<trim prefix="update_time = case" suffix="end,">
<foreach collection="list" item="item" index="index">
when id=#{item.id} then #{item.update_time}
</foreach>
</trim>
</trim>
where id in
<foreach collection="list" index="index" item="item" separator="," open="(" close=")">
#{item.id}
</foreach>
</update>
该SQL批量更新了表t_item_priority
中满足id需求的数据记录的两个字段item_random_score
和update_time
。以下是一个对应的SQL语句
UPDATE t_item_priority
SET item_random_score = CASE
WHEN id = $id1 THEN
$item_random_score1
WHEN id = $id2 THEN
$item_random_score1
END,
update_time = CASE
WHEN id = $id1 THEN
$update_time1
WHEN id = $id2 THEN
$update_time2
END
WHERE
id IN ($id1, $id2)
mybatis调用代码示例片段:
List<Map<String,Object>> list = new ArrayList<>();
Random random = new Random();
Date now = new Date();
for (int i = 1; i <5 ; i++) {
Map<String,Object> map = new HashMap<>();
map.put("id",i);
map.put("item_random_score",random.nextFloat());
map.put("update_time",now);
list.add(map);
}
sqlSession.update($sqlId, list);
foreach 实现in集合
只有一个数组或集合参数
批量删除多个用户,in查询
<delete id="deleteUsers" parameterType="list" >
DELETE FROM user WHERE 1 = 1
<if test="list != null and list.size()>0">
AND id IN
<foreach collection="list" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
</delete>
mybatis调用代码示例片段:
List<String> ids = new ArrayList<>();
ids.add("4");
ids.add("5");
int delete = sqlSession.delete($sqlId, ids);
当调用方使用数组参数时,foreach 标签的collection属性设置为array即可