直接上代码
@Override
public String saveAttrInfo(PmsBaseAttrInfo pmsBaseAttrInfo) {
if(StringUtils.isBlank(pmsBaseAttrInfo.getId())){
//id为空,保存操作
//保存属性
pmsBaseAttrInfoMapper.insertSelective(pmsBaseAttrInfo); //insertSelective 不将null值插入数据库
//保存属性值
List<PmsBaseAttrValue> pmsBaseAttrValues = pmsBaseAttrInfo.getAttrValueList();
for (PmsBaseAttrValue pmsBaseAttrValue : pmsBaseAttrValues) {
pmsBaseAttrValue.setAttrId(pmsBaseAttrInfo.getId());
pmsBaseAttrValueMapper.insertSelective(pmsBaseAttrValue);
}
return "success";
}else{
//id不为空,修改操作
//属性修改
Example example = new Example(pmsBaseAttrInfo.getClass());
example.createCriteria().andEqualTo("id",pmsBaseAttrInfo.getId());
pmsBaseAttrInfoMapper.updateByExampleSelective(pmsBaseAttrInfo,example);
//属性值修改
//按照属性id,删除所有属性值
PmsBaseAttrValue pmsBaseAttrValueDel = new PmsBaseAttrValue();
pmsBaseAttrValueDel.setAttrId(pmsBaseAttrInfo.getId());
pmsBaseAttrValueMapper.delete(pmsBaseAttrValueDel);
//删除后,将新的属性值插入
List<PmsBaseAttrValue> attrValueList = pmsBaseAttrInfo.getAttrValueList();
for (PmsBaseAttrValue pmsBaseAttrValue : attrValueList) {
pmsBaseAttrValueMapper.insertSelective(pmsBaseAttrValue);
}
return "success";
}
当用户点击"保存"按钮时,前端url指向controller的saveAttrInfo方法
其内部逻辑是:
- 判断主键是否有值,为空则是保存操作
- 主键有值则是"更新"操作,"更新"操作分为update和delete,逻辑是先进行删除,再进行插入,完成更新操作