修改的话我们一般要做两件事情
回显和修改
回显的话一般我们就是根据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);