苍穹外卖day03
bug记录
- 知识点记录
公共字段自动填充

- 使用aop切面编程
① 自定义注解AutoFill
![]()
② 自定义切面类 AutoFillAspect

③ 在mapper方法上加入注解

上传图片
配置类,用于创建AliOssUtil对象
给方法加上@Bean注解,这样在项目启动的时候会调用到该方法,把AliOssUtil对象创建出来,创建出之后交给spring容器管理。
@ConditionalOnMissingBean保证整个spring容器中只有一个AliOssUtil对象。
上传的文件如果用原始的名称,无法避免与服务器上已有图片重名的情况,因此使用UUID重命名。
新增菜品
每个dish对应的flavor有个属性dishId,需要获得该dish的自增序号;
在插入dish时,设置useGeneratedKeys="true",表示需要获得insert语句插入所生成的主键值,并把该值赋给id属性;
再通过getId可以将该值取出利用;

执行新增菜品后,未知错误。控制台未输出报错信息,数据库也无对应的新增数据;
原因:xml文件中的sql语句写错,对象属性名大小写有误。
菜品分类查询
-
设计对应的 DTO,以及对应的VO;为什么这里要设计VO?
返回数据里,有一个categoryName属性,该属性在dish表里没有,dish表里只有分类id;
DishVO里除了有dish的基本属性外,还扩展了categoryName属性;
把该DishVO转成json返回给前端,方便正常展示。 -
通过外连接查询两个表的结果,如果存在重名的情况,需要重命名,否则属性注入时会出错。
xml文件里 查询映射 需要加上 resultType="com.sky.vo.DishVO",否则没有返回值!(error:a query is run but no result return)

删除菜品
业务规则:
① 可点击菜品后面的删除键,一次删除一个菜品;也可以勾选多个菜品,批量删除菜品
--> 不需要设计两个接口,批量删除可以包括删除单个的情况
② 起售中的菜品不能删除
--> 删除前查询setmael_dish表
③ 被套餐关联的菜品不能删除
④ 删除菜品后,关联的口味数据也需要删除
--> 删除dish_flavor表中关联数据,可以省去查询步骤,不管有无关联数据,直接删
-
MVC框架动态解析传入的参数 @RequestParam
前端传入的参数为ids,是“1,2,3”示例的字符串,而接口希望拿到的是1,2,3的集合List;
可以加入注解 @RequestParam,由MVC框架动态解析字符串,并把id提取出来封装到集合中
![]()
-
sql 通过foreach循环拼接
![]()
把ids里的元素循环放到()里,并用“,”分隔 -
涉及多个数据表的操作,需要加 数据注解 @Transactional,保持其一致性
-
遍历中放sql语句容易引发性能方面的问题
![]()
优化:把sql语句的数量尽可能减少,批量删除;扩展deletByDishIds()函数,通过映射文件执行sql语句

修改菜品
路径参数,形参需要加上@PathVariable注解
Query参数,形参可加可不加@RequestParam,注意参数名称要与前端传过来的保持一致。




浙公网安备 33010602011771号