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

#新星杯·14天创作挑战营·第10期#

Day4

目录

Day4

 前言

1.完成任务报告

2.任务中的收获

3.知识点扩展

3.1为什么@ReuqestParm可以省略

3.2为什么@ModelAttribute可以省略

3.3@ReuqestParm与@ModelAttribute的区别

作者是跟黑马课程学的

 前言

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

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就需要自己判断

### 关于苍穹外卖项目第四天教程视频 对于特定项目的教程视频查询,尤其是像苍穹外卖这样的具体项目,在提供的参考资料中并未直接提及该项目及其对应的每日教程详情[^1][^2][^3]。 然而,通常这类系列教程会按照一定模式发布,例如每天更新一期视频来覆盖不同主题或功能模块。为了定位到苍穹外卖项目第4天的具体教程: - 可以访问官方文档或者课程平台主页查找是否有详细的日程安排表。 - 如果存在配套的学习社区或论坛,则可以尝试在那里询问其他学员是否记得当天的内容重点。 - 社交媒体平台上也可能有关于此项目的讨论群组,加入这些群体往往能更快获得帮助。 另外值得注意的是,许多在线教育平台都会提供完整的播放列表,其中包含了整个课程的所有章节,这样就可以轻松跳转至所需的那一部分进行观看学习。 ```python # 假设有一个函数可以从给定URL获取视频列表并返回指定日期的教学资源链接 def get_tutorial_video_url(project_name, day_number): base_url = "https://example.com/tutorials" full_path = f"{base_url}/{project_name}/day_{day_number}.mp4" return full_path if check_if_exists(full_path) else None # 使用示例 tutorial_day_4_link = get_tutorial_video_url('qingtian_takeout', 4) if tutorial_day_4_link: print(f"Day 4 tutorial available at {tutorial_day_4_link}") else: print("Could not find the requested tutorial.") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值