新增菜品——后端SpringBoot

铁佛  金牌会员 | 2024-6-11 19:05:17 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 984|帖子 984|积分 2952

交互逻辑:

  • 页面发送ajax哀求,哀求服务端获取菜品分类数据并展示到下拉框中
  • 页面发送哀求举行图片上传,哀求服务端将图片保存到服务器
  • 页面发送哀求举行图片下载,将上传的图片举行回显
  • 点击保存按钮,发送ajax哀求,将菜品相关数据以json形式提交到服务器
核心:
        新增菜品功能,实质就是在服务端处置惩罚前端页面发送的4次哀求。
代码:
1.查询分类数据
在CategoryController.java中:
  1.     /**
  2.      * 根据条件来查询分类数据
  3.      * @param category
  4.      * @return
  5.      */
  6.     @GetMapping("/list")
  7.     public R<List<Category>> list(Category category){
  8.         //条件构造器
  9.         LambdaQueryWrapper<Category> queryWrapper = new LambdaQueryWrapper<>();
  10.         //添加条件
  11.         queryWrapper.eq(category.getType()!=null, Category::getType, category.getType());
  12.         //添加排序条件
  13.         queryWrapper.orderByAsc(Category::getSort).orderByDesc(Category::getUpdateTime);
  14.         List<Category> list = categoryService.list(queryWrapper);
  15.         return R.success(list);
  16.     }
复制代码
2.接收页面提交的数据
封装页面提交的数据:
  1. @Data
  2. public class DishDto extends Dish {
  3.     private List<DishFlavor> flavors = new ArrayList<>();
  4.     private String categoryName;
  5.     private Integer copies;
  6. }
复制代码
在dishController.java中保存数据:
  1. @RestController
  2. @RequestMapping("/dish")
  3. @Slf4j
  4. public class DishController {
  5.     @Autowired
  6.     private DishService dishService;
  7.     @Autowired
  8.     private DishFlavorService dishFlavorService;
  9.     /**
  10.      * 新增菜品
  11.      * @param dishDto
  12.      * @return
  13.      */
  14.     @PostMapping
  15.     public R<String> save(@RequestBody DishDto dishDto){
  16.         log.info(dishDto.toString());
  17.         return null;
  18.     }
  19. }
复制代码
3.保存数据
必要操作dish、dishFlavor两张表,即同时插入菜品对应的口味数据:
3.1 接口dishService处声明:
  1. public interface DishService extends IService<Dish> {
  2.     //新增菜品,同时插入菜品对应的口味数据,操作dish、dishFlavor两张表
  3.     public void saveWithFlavor(DishDto dishDto);
  4. }
复制代码
3.2 实现类处实现:
DishFlavor中的dishId要赋好值。 
@Transactional注解作用是确保保存菜品基本信息和保存菜品口味数据的过程实是在一个事件中完成的。
  1.     @Autowired
  2.     private DishFlavorService dishFlavorService;
  3.     /**
  4.      * 新增菜品,同时保存对应的口味数据
  5.      * @param dishDto
  6.      */
  7.     @Transactional
  8.     public void saveWithFlavor(DishDto dishDto) {
  9.         //保存菜品的基本信息到dish表
  10.         this.save(dishDto);
  11.         Long dishId = dishDto.getId(); //菜品id
  12.         //菜品口味
  13.         List<DishFlavor> flavors = dishDto.getFlavors();
  14.         flavors = flavors.stream().map((item) ->{
  15.             item.setDishId(dishId);
  16.             return item;
  17.         }).collect(Collectors.toList());
  18.         //获取菜品口味集合中的Stream流,遍历每个DishFlavor对象,将其id赋值为dishDto里的菜品id
  19.         //最后通过Collectors.toList()收集器将流中的元素收集到一个新的List集合中
  20.         //保存菜品的口味数据到dish_flavor表中
  21.         dishFlavorService.saveBatch(flavors);
  22.     }
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

铁佛

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表