1.修改的时候不仅要按id修改 ,还有加上查询时候的update的时间,不然就是一条脏数据。
@Override
public Integer updateTVarBasic(TVarBasic tVarBasic) {
//多条件查询
Example example =new Example(TVarBasic.class);
Example.Criteria criteria= example.createCriteria();
//加上id条件
criteria.andEqualTo("id",tVarBasic.getId());
Date dt = tVarBasic.getUpdateTime();
//加上update条件
criteria.andEqualTo("updateTime",dt);
//set 当前时间
tVarBasic.setUpdateTime(new Date());
int t = tVarBasicMapper.updateByExampleSelective(tVarBasic,example);
if(t > 0){
redisCacheService.delete(Constant.REDIS_CONSOLE_VAR_BASIC_ALL);
}
return t;
}
2.一对多修改以及事务:
加上@Transactional(rollbackFor = Exception.class)注解,如果sql出错 事务内的sql会全部回滚。
/**
* 修改衍生变量
*
* @param tVarDerive
* @param erros
* @return
*/
@Transactional(rollbackFor = Exception.class)
@PutMapping
public Result updateVarDerive(@Valid @RequestBody TVarDerive tVarDerive, BindingResult erros) {
log.info("tVarDerive:{}" + tVarDerive);
int deriveIsUse = iVarDeriveService.getDeriveIsUse(tVarDerive.getId());
if (deriveIsUse > 0) {
//已经被使用 不能删除
return ResultUtil.error(ResultEnum.DERIVE_ALREADY_USE);
}
//修改1表
int isSuccess = iVarDeriveService.updateTVarDerive(tVarDerive);
if (isSuccess > 0) {
List<TVarDeriveFactor> lst = iVarDeriveFactorService.selectFactorByDeriveId(tVarDerive.getId());
for (TVarDeriveFactor deleteDeriveFactor : lst) {
//删除多的一方的所有数据
iVarDeriveFactorService.deleteVarDeriveFactory(deleteDeriveFactor.getId());
}
for (TVarDeriveFactor tVarDeriveFactor : tVarDerive.gettVarDeriveFactors()) {
TVarDeriveFactor deriveFactor = new TVarDeriveFactor();
//BeanUtils 是org.springframework.beans.BeanUtils下的
//把左边对象的内容复制到右边对象中去
BeanUtils.copyProperties(tVarDeriveFactor, deriveFactor);
deriveFactor.setCreateTime(new Date());
deriveFactor.setUpdateTime(new Date());
//然后新增 相当于是修改
iVarDeriveFactorService.insertVarDerive(deriveFactor);
}
} else {
return ResultUtil.error(ResultEnum.UPDATE_ERROE);
}
return ResultUtil.success();
}