@Transactional
public boolean updateFormBizData(String status, String nodeId, String taskId, String userIds,Integer draftCode,String statusName, FormBizData formBizData) {
boolean isDraft = DraftEnum.草稿.getCode().equals(draftCode);
LambdaUpdateWrapper<FormBizData> wrapper = Wrappers.<FormBizData>lambdaUpdate()
.set(FormBizData::getStatus, status)
.set(FormBizData::getStatusName, statusName)
.set(FormBizData::getCurrentTaskId, taskId)
.set(FormBizData::getCurrentNode, nodeId)
.set(FormBizData::getCurrentUsers, userIds)
.set(FormBizData::getIsDraft, isDraft)
.set(isDraft,FormBizData::getProcDefId,null)
.set(isDraft,FormBizData::getProcessKey,null)
.eq(FormBizData::getId, formBizData.getId());
int row = formBizDataService.getBaseMapper().update(null, wrapper);
return row>0;
}
- 用service层的
service.updateById()
或者持久层mapper.updateById()
方法时,只是通过id更新非空元素。 - 用上诉.set的方式进行更新时,不管值是不是空的,都会进行更新。执行的sql,其实就是mysql的sql语句上使用了set方式设置null值。
看sql
UPDATE form_biz_data SET `status`=?,status_name=?,current_task_id=?,current_node=?,current_users=?,is_draft=?,proc_def_id=?,process_key=?
WHERE is_deleted=0
AND (id = ?)