mybatis根据多个ID查询集合对象,并批量更新对象
1.需求描述
表单中有表单内容,以及多个附件,在提交表单的时需要把主表的内容保存起来,同时也要将主表的ID更新的附件表中
2.解决方案
2.1表设计
2.2 接口定义
@PostMapping("/getAlarmTypeList") public RestResponse saveAlarmRepair(@RequestBody JSONObject jsonObject){ ptwBusAlarmService.saveAlarmRepair(jsonObject); return RestResponse.success(); }
2.3 业务层实现
public boolean saveAlarmRepair(JSONObject jsonObject) { PtwBusAlarmEntity alarmEntity = new PtwBusAlarmEntity(); alarmEntity.setAlarmTypeId(jsonObject.getString("alarmTypeId")); alarmEntity.setQuestionDesc(jsonObject.getString("questionDesc")); this.save(alarmEntity); JSONArray fileIds = jsonObject.getJSONArray("photosIds"); List<SysOssEntity> list = sysOssDao.getSysOssByIds(fileIds); List<SysOssEntity> listNew = new ArrayList<>(); for (int i = 0; i < list.size(); i++) { SysOssEntity sysOssEntity = list.get(i); sysOssEntity.setMainId(alarmEntity.getId()); listNew.add(sysOssEntity); } return sysOssService.updateBatchById(listNew); }
2.4 dao层实现
List<SysOssEntity> getSysOssByIds(@Param("sysOssIds")JSONArray sysOssIds);
2.5 xml方法实现
<select id="getSysOssByIds" resultType="com.quantitative.biz.modules.oss.entity.SysOssEntity"> SELECT T.ID, T.URL, T.MAIN_ID FROM SYS_OSS T WHERE T.ID IN <foreach item="item" index="index" collection="sysOssIds" open="(" separator="," close=")"> #{item} </foreach> </select>
3. 总结
3.1根据多个ID进行查询是需要注意
3.2使用mybatis的foreach进行循环
3.3 采用苞米豆封装的批量更新方法
参考: