修改的标准模版

修改的话我们一般要做两件事情

回显和修改
 

回显的话一般我们就是根据id来返回实体类

整个过程非常的简单丝滑
示例代码:

 

@ApiOperation("根据id查询员工")
@GetMapping("/{id}")
public Result<Employee> getById(@PathVariable Long id)
{
    Employee employee=employeeService.getById(id);
    return Result.success(employee);
}
@Override
public Employee getById(Long id) {
    return employeeMapper.getById(id);
}
@Select("select * from employee where id = #{id}")
Employee getById(Long id);

如果回显的时候要查两张表然后把结果封装好返回前端的情况

也不用着急因为返回给前端的是VO

我们只需要先给先定义一个VO先传一张表的数据,再把另一张表的数据交给它就可以了

@Override
public DishVO getById(Integer id) {
    //查完这个再调用一个方法把flavor加进去
    DishVO dishVo= dishMapper.getById(id);
    dishVo.setFlavors(dishFlavorMapper.getByDishId(id));
    return dishVo;
}

然后的话我们就涉及到了修改层面

先确定入参数和出参数

入餐的话一般是一个DTO和添加是一样的

因为其实其实本质就是你把添加的信息再次修改一下,但是数据种类和类型都是一样的不变的

然后的话我们继续

Controller接收到DTO之后不用处理直接交给service层

因为我们update操作要更新修改时间和修改人

所以的话我们是需要新建一个实体类来接受的,因为DTO里面是不包含时间和人的字段的

把DTO拷到实体类里面去

我们这个时候其实就可以直接把实体类送到Mapper层进行数据的更新了,但是一些情况下DTO里面含有一些实体类里面没有的字段,我们需要插入到另外一张表里面去,这个时候我们的标准流程就是,先将额外字段的内容给删除掉

然后我们判断DTO里面这些额外字段时候为空,如果为空的话就不执行插入Sql语句,否则就执行

这样就把检查字段是否为空的压力避免扩散到了Mapper层的sql语句

示例代码:

 

//修改套餐
@ApiOperation("修改套餐")
@PutMapping
public Result update(@RequestBody SetmealDTO setmealDTO)
{
    setmealService.update(setmealDTO);
    return Result.success();
}

@Override
public void update(SetmealDTO setmealDTO) {
    //新建两个实体类
    Setmeal setmeal=new Setmeal();
    BeanUtils.copyProperties(setmealDTO,setmeal);
    setmealMapper.update(setmeal);
    //还有一个是要在setmeal_dish表中删除包含此id的关联记录
    setmealDishMapper.deleteBySetmealId(setmealDTO.getId());
    //然后在setmeal_dish表中插入新的关联记录
    //先看一下setmealDTO里面的setmealDishes有没有
    if (setmealDTO.getSetmealDishes()!=null&&setmealDTO.getSetmealDishes().size()>0)
    {
        setmealDTO.getSetmealDishes().forEach(setmealDish -> setmealDish.setSetmealId(setmealDTO.getId()));
        setmealDishMapper.saveSetmealDish(setmealDTO.getSetmealDishes());

    }
}

@AutoFill(OperationType.UPDATE)
@Update("update setmeal set category_id = #{categoryId}, name = #{name}, price = #{price}, " +
        "description = #{description}, image = #{image}, update_time = #{updateTime}, update_user = #{updateUser} where id = #{id}")
void update(Setmeal setmeal);

@Delete("DELETE FROM setmeal_dish WHERE setmeal_id = #{id}")
    void deleteBySetmealId(Long id);

@Insert({
        "<script>",
        "insert into setmeal_dish (setmeal_id, dish_id, name, price, copies) values ",
        "<foreach collection='setmealDishes' item='setmealDish' separator=','>",
        "(#{setmealDish.setmealId}, #{setmealDish.dishId}, #{setmealDish.name}, #{setmealDish.price}, #{setmealDish.copies})",
        "</foreach>",
        "</script>"
})
void saveSetmealDish(List<SetmealDish> setmealDishes);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值