(一)新增
controller层思路:
- 调用service处理
- 响应处理结果
@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注解以及在启动类上开启事务注解驱动管理即可
- 检查菜品名称不能重复
- 保存菜品基本信息到菜品口味表dish,可以直接传dishDto对象 因为dishDto继承了Dish 插入时只会根据Dish类中有的属性设置插入字段的值 多余的字段会自动忽略
- 获取菜品id MyBatisPlus中当完成了新增操作之后,会自动的将生成的id赋值到对象的主键属性上
- 保存菜品口味信息到菜品口味表dish_flavor
- 获取菜品口味信息列表
- 为当前的菜品口味设置关联的菜品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层