首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >《苍穹外卖Day4:大一菜鸟的代码升空纪实》

《苍穹外卖Day4:大一菜鸟的代码升空纪实》

作者头像
张哈大
发布2025-05-31 08:40:07
发布2025-05-31 08:40:07
1670
举报
文章被收录于专栏:RedisRedis

作者是跟黑马课程学的

前言

今天是独自完成有关于菜品套餐的接口

1.完成任务报告

1.完成顺序,老师要求:

  • 新增套餐
  • 套餐分页查询
  • 删除套餐
  • 修改套餐
  • 起售停售套餐

2.补充之前菜品未完成接口(老师忽略的)

2.任务中的收获

1.新增套餐接口:由于是添加一个套餐,那么套餐是不是包含了菜品的选择,所以我们要考虑添加套餐时进行菜品的回显,让管理员选择菜品,当套餐的信息要保存时,后端也应将前端的数据进行分模块的纪录在数据库中,并且添加完套餐后,默认套餐是停售状态

重点:我们每次完成一个接口时要考虑是否需要后端数据回显,考虑是否需要分模块的存入数据库

2.套餐分页查询接口:这个没有特别注意的,主要是会使用PageHelper这个插件,具体功能之前有说过了

3.删除套餐接口:由于这是一个外卖平台,那么正在启售的套餐是不能删除的(用户在选套餐,突然套餐没了,这不行吧),所以我们需要判断选择的套餐的售卖状态(正在售卖的不能删除,停止售卖的可以删除)

重点:实现删除接口时,我们需要考虑什么时候是可以删除的,我们可以直接写个批量删除的接口就可以了(删除单个也包含在内)

4.修改套餐接口:管理员修改套餐,点击修改,套餐数据是不是需要展示出来(数据回显),而当管理员修改完数据,后端接收到数据时,我们需要做个判断,管理员修改的数据我就修改,没有修改的,那我就保持原来的数据(SQL语句中用<if>来实现)

重点:实现修改接口,肯定要数据回显的,并且判断哪些是要修改的数据

5.起售停售套餐接口:当我要起售一个套餐时,套餐里包含菜品,那么我们需要考虑套餐里面的菜品是否是可以售卖状态,如果包含不可售卖的菜品,那么套餐就不能起售(停售不需要)

重点:当你要改变一个东西的状态,那么我们需要考虑它所关联的数据,是否允许改变

6.总体收获:

1.我在完成接口时每次出的错都是在SQL语句书写错误,比如:没有逗号 2.看接口文档的细节:老师给的接口文档上标明该参数会传给后端(其实是空),那么这时候你就需要考虑哪些是展示给用户看的,用户看的数据,返回给后端就一定是有数据的,那些没有的你就需要给它设置数据重点:考虑哪些数据需要你自己来赋值的) 3.涉及多个SQL语句的执行时,记得加上事务管理(@Transactional) 4.如:批量删除,那我们应该在SQL语句中进行循环的删除,不要在业务层来进行循环来调用SQL(效率不高) =》(重点:如果要循环调用SQL语句,在SQL语句上写循环,不要在业务层循环调用)(尽量减少多次查询数据库)

3.知识点扩展

3.1为什么@ReuqestParm可以省略

1.之前我说过,@ReuqestParm这个注解是用来接收前端地址栏传参时所使用的注解,当前端与后端参数名称相同时可以省略

2.为什么呢?

1.首先后端如果用基本类型,数组,集合来接收前端的数据,Spring会默认使用@ReuqestParm这个注解

2.而前后端参数名称相同省略@ReuqestParm那么Spring就会自动按@ReuqestParm来实现(类似自动装配,它会帮你自动一一对应上)

3.如果前后端多个参数名称也对应相同,也可以省略@ReuqestParmSpring会自动根据名称来接收

4.参数名称不同,那么你就需要指定对应名称,让Sping能够来对应接收数据

5.前端传过来是一个数组,你选择String类型接收@ReuqestParm可以忽略,选择集合,数组来接收,那么你需要声名@ReuqestParmSpring先知道前端传过来数组,然后你加上了@ReuqestParm,那么Spring会自动拿出前端数组里面的元素,装入后端的集合或者数组中当然参数不同,你还需要指定参数)

6.接上面,如果我不写这个注解@ReuqestParm呢,那么Spring会默认前端传过来的是一个整体参数,不会进行拆分,那么你数组或者集合的第一个元素装的就是它

3.总结:明确后端接收数据的参数类型(基本类型,字符串,数组,集合),Spring就会默认@ReuqestParm,前后端参数名称不同,就在注解中指定名称

3.2为什么@ModelAttribute可以省略

1.我一开始都不知道这个注解,这是我写代码时报错时询问Ai时才知道它

2.如果前端传过来很多参数,后端是不是可以用一个自定义实体类来接收,老师说可以省略注解,我之前一直以为就是@ReuqestParm,好吧,其实是@ModelAttribute

3.@ModelAttribute的作用:

1.如果你后端用来接收前端的参数是一个对象,自定义实体类(这种封装类),那么Spring识别到这个参数类型,就会自动默认@ModelAttribute来实现功能

2.而@ModelAttribute的功能就是将前端传过来的参数一一对应进后端封装的实体类中(就说实体类的属性名称与前端参数名称相同,就可以一一对应赋值

4.为什么可以省略:

1.其实原理和@ReuqestParm差不多,因为Spring会识别,当你后端接收参数是自定义类型(这样的类型都可以),Spring就会默认@ModelAttribute来实现,所以你可以省略

2.类似功能可以根据上面@ReuqestParm说明来推出

3.3@ReuqestParm与@ModelAttribute的区别

1.@ReuqestParm要参数名称对应才能省略,而@ModelAttribute实际上是进行实体类封装,不需要参数名称对应也能省略(实体类中的属性名称要与前端参数名称对应)

2.Spring默认识别不同:当基本类型,字符串,数组,集合时(@ReuqestParm),自定义实体类时(@ModelAttribute)

3.@ModelAttribute一般都不用特意写出来,而@ReuqestParm就需要自己判断

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-04-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 1.完成任务报告
  • 2.任务中的收获
  • 3.知识点扩展
    • 3.1为什么@ReuqestParm可以省略
    • 3.2为什么@ModelAttribute可以省略
    • 3.3@ReuqestParm与@ModelAttribute的区别
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档