Bootstrap

外卖点餐APP-04(后台--菜品管理)

(一)新增

controller层思路:

  1. 调用service处理
  2. 响应处理结果
@PostMapping
public R<String> save(@RequestBody DishDto dishDto){
    dishService.saveWithFlavors(dishDto);
    return R.success("新增成功!");
}

service层

public interface DishService extends IService<Dish> {
    void saveWithFlavors(DishDto dishDto);
}

serviceImpl层思路:

注意:由于新增菜品操作了两张表  进行了2个写操作,要保证插入菜品基本信息和口味信息同时成功 新增菜品才成功 所以需要添加事务管理,在方法上打上@Transactional注解以及在启动类上开启事务注解驱动管理即可

  1. 检查菜品名称不能重复
  2. 保存菜品基本信息到菜品口味表dish,可以直接传dishDto对象 因为dishDto继承了Dish  插入时只会根据Dish类中有的属性设置插入字段的值 多余的字段会自动忽略
  3. 获取菜品id  MyBatisPlus中当完成了新增操作之后,会自动的将生成的id赋值到对象的主键属性上
  4. 保存菜品口味信息到菜品口味表dish_flavor
  5. 获取菜品口味信息列表
  6. 为当前的菜品口味设置关联的菜品id dish_id字段
@Transactional
@Override
public void saveWithFlavors(DishDto dishDto) {
    LambdaQueryWrapper<Dish> wrapper = new LambdaQueryWrapper<>();
    wrapper.eq(Dish::getName,dishDto.getName());
    Integer count = dishDao.selectCount(wrapper);
    if (count>0){
        throw new CustomException(0,"菜品名称'"+dishDto.getName()+"'已经存在");
    }
    dishDao.insert(dishDto);
    Long dishDtoId = dishDto.getId();
    List<DishFlavor> flavors = dishDto.getFlavors();
    flavors.stream().forEach(flavor->{
        flavor.setDishId(dishDtoId);
        dishFlavorDao.insert(flavor);
    });
}

(二)分页查询

controller层

@GetMapping("/page")
public R<Page<DishDto>> page(@RequestParam(defaultValue="1") Integer page, @RequestParam(defaultValue="10") Integer pageSize, String name){
    //1.调用service处理
    Page<DishDto> dishPage = dishService.findPage(page,pageSize,name);
    //2.响应处理结果
    return R.success(dishPage);
}

service层

public interface DishService extends IService<Dish> {
    Page<DishDto> findPage(Integer page, Integer pageSize, String name);
}

serviceImpl层

;