(批量更新)对多个符合条件的id做更新操作

需求描述:把checkbox勾选的对应id的记录的标志位置1或0,这个其实不难的,不过我自己做的话,肯定是多次访问数据库做更新,看了老大的代码,发现差距不是一般的大,老大把sql灵活运用,结果一次访问数据库,就做完更新了,真的是get到了。不多说,贴代码。

代码:

public void changeHide(String resIds, String type) throws Exception {//service层  type就是一个值 0 或 1
if(Tools.notEmpty(resIds)){
List<String> list = new ArrayList<>();
String[] resIdArr = resIds.split(",");
for (String resId :resIdArr) {
list.add(resId);
}
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("resIds",list);
paramMap.put("type",type);
dao.update("XXXXXResourcesMapper.changeHide",paramMap);
}
}
mapper里的sql:
<update id="changeHide" parameterType="java.util.Map">
update
<include refid="tableName"></include>
set r.hide = #{type}
where r.res_id in
<foreach item="item" index="index" collection="resIds" open="(" separator="," close=")">//这里要说明一下,collection参数一定要填写对应好,因为前边方法传的是resIds,所以这里也是,item表示list里的元素的别名 index表示索引,当指针来理解
#{item}
</foreach>
</update>

总结:这个批量更新的精华就在于,只要数据库中的id在这个list(也就是resIds)中存在,就对其进行更新操作。  让我拿来做,我可能会对resIds做个增强for循环,然后再循环里边调用update方法,参数就是每一个resId。还是敲得代码少,老大这个是真的厉害!!!

原文地址:https://www.cnblogs.com/xuchao0506/p/9578030.html