培训网站建设方案模板下载百度软件市场
需求分析
在后台中,通过新增功能来添加一个新的菜品,在添加菜品时需要选择当前菜品所属的菜品分类,并且需要上传的菜品图片。
代码开发
需要添加的类和基本接口:实体类DishFlavor
、Mapper接口DishFlavorMapper
、业务层接口DishFlavorService
、业务层实现类DishFlavorServiceImpl
、控制层DishController
- 页面发送ajax请求,请求服务器端获取菜品分类数据并展示到
下拉框
中 - 页面发送请求进行图片上传,请求服务端将图片保存到服务器
- 页面发送请求进行图片下载,将上传的图片进行回显
- 点击保存按钮,发送ajax请求,将菜品相关数据以json形式提交到服务端
获取菜品分类列表(下拉框)
// 获取菜品分类列表
const getCategoryList = (params) => {return $axios({url: '/category/list',method: 'get',params})
}
前端发送aiax请求的地址是'/category/list'
,所以应该在CategoryController
中写这个方法
添加菜品功能,通过调试前端发现查看菜品分类没有报错。
/*** 根据条件,获取菜品分类列表* @param category* @return*/@GetMapping("/list")public R<List<Category>> list(Category category){//条件构造器LambdaQueryWrapper<Category> queryWrapper = new LambdaQueryWrapper<>();//添加条件queryWrapper.eq(category.getType() != null,Category::getType,category.getType());//添加排序条件 优先使用sort排序 当sort相同的情况下 使用更新时间进行排序queryWrapper.orderByAsc(Category::getSort).orderByDesc(Category::getUpdateTime);List<Category> list = categoryService.list(queryWrapper);return R.success(list);}
排序也是正确的
上传图片
这里我上传了两次,第一次上传的图片超过了2MB,所以报错了,然后我只能上传大笨狗,上传成功了。下图分别是上传和浏览请求成功的提示。
接受页面提交的数据
数据格式:
此时save()的参数不能直接使用Dish dish,因为通过前端传送的数据格式可以看到有flavors这个参数。
解决办法:导入
DishDto
,用于封装页面提交的数据
检查封装的数据是否有问题:
2023-08-01 10:18:03.969 INFO 8552 --- [nio-8060-exec-2] c.s.reggie.controller.DishController : DishDto(flavors=[DishFlavor(id=null, dishId=null, name=甜味, value=["无糖","少糖","半糖","多糖","全糖"], createTime=null, updateTime=null, createUser=null, updateUser=null, isDeleted=null), DishFlavor(id=null, dishId=null, name=温度, value=["热饮","常温","去冰","少冰","多冰"], createTime=null, updateTime=null, createUser=null, updateUser=null, isDeleted=null)], categoryName=null, copies=null)
测试代码:
@PostMappingpublic R<String> save(@RequestBody DishDto dishDto)//记得封装要加RequestBody注解{log.info(dishDto.toString());return null;}
新增大笨狗成功。
/*** 菜品管理*/
@RestController
@RequestMapping("/dish")
@Slf4j
public class DishController {@Autowiredprivate DishService dishService;//菜品服务@Autowiredprivate DishFlavorService dishFlavorService;//菜品口味@PostMappingpublic R<String> save(@RequestBody DishDto dishDto)//记得封装要加RequestBody注解{log.info(dishDto.toString());dishService.saveWithFlavor(dishDto);return R.success("新增菜品成功...");}
package com.springboot.reggie.service.impl;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.springboot.reggie.dto.DishDto;
import com.springboot.reggie.entity.Dish;
import com.springboot.reggie.entity.DishFlavor;
import com.springboot.reggie.mapper.DishMapper;
import com.springboot.reggie.service.DishFlavorService;
import com.springboot.reggie.service.DishService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;import java.util.List;
import java.util.stream.Collectors;@Service
@Slf4jpublic class DishServiceImpl extends ServiceImpl<DishMapper, Dish> implements DishService {@Autowiredprivate DishFlavorService dishFlavorService;/*** 新增菜品 同时保存对应的口味* @param dishDto*/@Transactional //需要加上事务控制 因为涉及到多张表的操作public void saveWithFlavor(DishDto dishDto){//保存菜品的基本信息到菜品表this.save(dishDto);Long dishId = dishDto.getId();//给菜品id赋值//菜品口味List<DishFlavor> flavors = dishDto.getFlavors();flavors = flavors.stream().map((item)->{item.setDishId(dishId);return item;}).collect(Collectors.toList());//保存菜品口味数据到菜品口味表dishFlavorService.saveBatch(flavors);}}