多条数据更新操作场景还是非常多的,每次碰到类似问题还是需要稍微百度一下复制,
so,与其每次看别人博客不如自己也记录一下,方便以后回忆并使用也方便了大家;
不过需要批量,记得一定检查一下是否有配置允许批量更新,如果已设置请忽略;
&allowMultiQueries=true 允许批量更新
spring.datasource.jdbc-url=jdbc:mysql://xx.xx.xx.xx:3306/数据库名?useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true
Service、mapper接口:
public int updateCheckStatusByProjectIds( Map<String,Object> param);
mapper.xml :
<update id="updateCheckStatusByPersonIds" parameterType="java.util.Map">
<!-- 接收list参数,循环着组装sql语句,注意for循环的写法
separator=";" 代表着每次循环完,在sql后面放一个分号
item="params" 循环List的每条的结果集
collection="paramMap" list 即为 map传过来的参数key -->
<foreach collection="paramMap" separator=";" item="params">
update person_info set
check_people = #{params.checkPeople},
check_status = #{params.checkStatus},
check_date = #{params.checkDate}
where person_id = #{params.personId}
</foreach>
</update>
Serviceimpl实现类:
public int updateCheckStatusByProjectIds(HttpServletRequest request, String projectId, String status){
if ("success".equals(status)){
status = Constant.SUCCESS_STATE;
}else{
status = Constant.REJECT_STATE;
}
Map<String,Object> map = new HashMap<String,Object>();
String[] arr = projectId.split(",");
User user = SessionUtils.getUser(request);
List<ProjectInfo> list = new ArrayList<ProjectInfo>();
for(int i=0;i<arr.length;i++){
ProjectInfo personInfo = new ProjectInfo();
personInfo.setCheckPeople(user.getId());
personInfo.setCheckStatus(status);
personInfo.setCheckDate(new Date());
personInfo.setProjectId(Integer.parseInt(arr[i]));
list.add(personInfo);
}
map.put("paramMap",list);
return projectInfoMapper.updateCheckStatusByProjectIds(map);
}
有问题还请留言,大神多多指教!