先建立实体,我需要用到的修改的数据set后面的和where条件后的参数
public class FcUpdata {
private Integer subsize;//我要修改的set后面的值是变量哦
private Integer id;//我要修改的对应的id
impl下面的数据
/**创建一个修改传值的参数集合对象*/
List<FcUpdata> list = new ArrayList<>();
for (int i=0;i<updataId.length;i++) {
/**获取对应的subsize和parents_id,对应删除*/
FcUpdata fcu = new FcUpdata(updataIdSubsize[i], updataId[i]);
list.add(fcu);
}
Mapper.doUpdate(list);
这是打印出来的结果,你可以对比下面的mybaties数据
UPDATE 表名TableName
SET subsize =CASE
WHEN ? THEN subsize-?
WHEN ? THEN subsize-?
WHEN ? THEN subsize-?
END
WHERE id in ( ? , ? , ? )
138(Integer), 3(Integer),
145(Integer), 2(Integer),
148(Integer), 4(Integer),
138(Integer), 145(Integer), 148(Integer)
mybaties写法,(
prefix="subsize =CASE id"
)这里的case 后面的id你必须要写,这个是标记当前执行到另一条语句了,看看case end 语句的结构你就了解它怎么工作的了。
<update id="doUpdateSubSize">
UPDATE 表名TableName
<trim prefix="SET" suffixOverrides="">
<trim prefix="subsize =CASE id" suffix="END">
<foreach collection="item" item="items" index="index">
WHEN #{items.id} THEN subsize-#{items.subsize}
</foreach>
</trim>
</trim>
WHERE id in
<foreach collection="item" item="items" open="(" separator="," close=")" index="index">
#{items.id}
</foreach>
</update>