【苍穹外卖】Day3 菜品接口

ops/2024/12/22 16:02:12/

1 公共字段自动填充(待添加)

2 菜品接口

2.1 新增菜品

2.1.1 根据类型查询分类 接口

(已完成)

2.1.2 文件上传 接口

通用接口

配置文件

在自定义配置类中定义了四个属性

在配置文件中

代表当前使用的配置环境是 dev 开发环境

在 dev 里面继续配置阿里云 OSS

然后创建一个配置类

@Bean 是Spring框架中的一个注解,用于指示一个方法的返回值应该被注册为Spring应用上下文中的bean。使用@Bean注解的方法通常会在Spring容器启动时被调用,并且其返回的对象会被Spring容器管理

需要的时候要 @autowired 自动注入

@ConditionalOnMissingBean 是Spring框架提供的一个条件化注解,用于在存在特定类型的bean时才创建或注册另一个bean。如果容器中已经存在相同类型的bean,则不会注册被此注解标记的方法产生的bean

新建一个 CommonController

在 postman  上传图片

保存在阿里云 OSS

(注意图片大小,过大会出现错误)

2.1.3 新增菜品 接口

Path:/admin/dish

Method:POST

DishDTO:

java">package com.sky.dto;import com.sky.entity.DishFlavor;
import lombok.Data;import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;@Data
public class DishDTO implements Serializable {private Long id;//菜品名称private String name;//菜品分类idprivate Long categoryId;//菜品价格private BigDecimal price;//图片private String image;//描述信息private String description;//0 停售 1 起售private Integer status;//口味private List<DishFlavor> flavors = new ArrayList<>();}

DishFlavor

java">package com.sky.entity;import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;import java.io.Serializable;/*** 菜品口味*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class DishFlavor implements Serializable {private static final long serialVersionUID = 1L;private Long id;//菜品idprivate Long dishId;//口味名称private String name;//口味数据listprivate String value;}

@Transactional 是Spring框架提供的注解,用于声明方法执行时应该具有事务性,即方法的执行要么完全成功,要么完全失败,不留下中间状态。这通常是通过将方法的执行包裹在一个数据库事务中来实现的

2.1.4 分页查询

业务规则:

  • 根据页码展示菜品信息
  • 每页展示10条数据
  • 分页查询时可以根据需要输入菜品名称、菜品分类、菜品状态进行查询

设计一个VO(视图对象)

包括了查询要展示的所有字段

java">package com.sky.vo;import com.sky.entity.DishFlavor;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class DishVO implements Serializable {private Long id;//菜品名称private String name;//菜品分类idprivate Long categoryId;//菜品价格private BigDecimal price;//图片private String image;//描述信息private String description;//0 停售 1 起售private Integer status;//更新时间private LocalDateTime updateTime;//分类名称private String categoryName;//菜品关联的口味private List<DishFlavor> flavors = new ArrayList<>();//private Integer copies;
}

Controller

Service

Mapper

用到了“起别名”和“左外连接

左外连接:

select a.name,b.name from a

left outer join b

on a.id = b.id

会返回一张表,这张表包括 a 表的全部信息(如果 b 中没有 a.id 的信息,则设置为 null),包括b的部分信息(仅仅当且仅当 a.id = b.id 时)

2.1.5 删除菜品

业务规则:

  • 可以一次删除一个菜品,也可以批量删除菜品
  • 起售中的菜品不能删除
  • 被套餐关联的菜品不能删除
  • 删除菜品后,关联的口味数据也需要删除掉

注意:这里设计接口传参是一个 id 数组,当需要删除一个菜品时,仅需要传递一个 id

需要操作三张表,分别是 菜品表口味表 和 套餐菜品 

Controller

前端传递过来的是"1,2,3"这样的字符串,用注解进行自动解析成 List

@RequestParam 是一个用在Java Spring Web框架中的注解,它用于将Web请求中的参数(例如,来自HTML表单或URL的参数)映射到控制器(Controller)方法的参数上。当你使用基于注解的控制器方法时,Spring框架能够自动将请求参数绑定到相应的方法参数上

Service

业务逻辑比较复杂,要先判断两步,然后再删除两步

这里 判断当前菜品是否被套餐关联 时,新建了一个 Mapper,用来根据菜品 id 获得套餐 id,然后看套餐 id 集合是否为空

Mapper

这里用到了 in 和 foreach 

foreach的标签:

<collection> 值是调用 Mapper 接口的形参名

<item> 遍历的临时变量名

<separator> 分隔符

<open> <close> 开始和结尾的字符

剩下两个mapper都是简单的

2.1.6 修改菜品

根据 id 查询菜品(还有连带的口味)

根据 id 查询菜品

Service

修改菜品:


http://www.ppmy.cn/ops/106786.html

相关文章

谷歌计划在越南设立首个美国科技数据中心

据一位知情人士透露&#xff0c;Alphabet 子公司谷歌正在考虑在越南建立一个大型数据中心。 如果实现&#xff0c;这将标志着美国科技巨头在东南亚国家首次进行此类大规模投资。 据一位匿名人士透露&#xff0c;谷歌正在评估在越南南部经济中心胡志明市附近建立一个“超大规模…

rsync搭建全网备份

rsync搭建全网备份 1. 总体概述1.1 目标1.2 简易指导图1.3 涉及工具或命令1.4 环境 2. 实施2.1 配置备份服务器2.2 备份文件准备2.3 整合命令2.4 扩展功能 1. 总体概述 1.1 目标 本次搭建目标&#xff1a; 每天定时把服务器数据备份到备份服务器备份完成后进行校验把过期数据…

android AccessibilityService合法合规增加小红书曝光阅读量(2024-09-02)

免责任声明: 任何可操作性的内容与本人无关,文章内容仅供参考学习&#xff0c;如有侵权损害贵公司利益&#xff0c;请联系作者&#xff0c;会立刻马上进行删除。 一、分析 目前可增加曝光阅读流量渠道入口&#xff08;完成&#xff09; 1. 发现页 打开小红书app选择顶部发现页&…

VOS3000外呼系统 如何注册 IMS

VOS3000 外呼系统是一个专业的语音通信平台&#xff0c;它支持多种通信协议&#xff0c;包括但不限于传统的PSTN&#xff08;公共交换电话网络&#xff09;和现代的IP电话系统。IMS&#xff08;IP多媒体子系统&#xff09;是基于IP网络的统一通信系统&#xff0c;它允许不同的运…

Elasticsearch:使用 LTR 进行个性化搜索

作者&#xff1a;来自 Elastic Max Jakob 如今&#xff0c;用户已经开始期待根据个人兴趣定制搜索结果。如果我们听的所有歌曲都是摇滚歌曲&#xff0c;那么在搜索 “Crazy” 时&#xff0c;我们会期望 Aerosmith 的歌曲排在搜索结果的首位&#xff0c;而不是 Gnarls Barkley 的…

easy_spring_boot Java 后端开发框架

Easy SpringBoot 基于 Java 17、SpringBoot 3.3.2 开发的后端框架&#xff0c;集成 MyBits-Plus、SpringDoc、SpringSecurity 等插件&#xff0c;旨在提供一个高效、易用的后端开发环境。该框架通过清晰的目录结构和模块化设计&#xff0c;帮助开发者快速构建和部署后端服务。…

大数据系列之:查看Centos服务器用户可以创建的最大线程数、查看系统内核支持的最大线程数、查看系统支持的最大进程数、设置最大线程数限制、查看进程使用的线程数

大数据系列之:查看Centos服务器用户可以创建的最大线程数、查看系统内核支持的最大线程数、查看系统支持的最大进程数、设置最大线程数限制、查看进程使用的线程数 显示当前用户的资源限制查看用户可以创建的最大线程指定进程的资源限制查看系统内核支持的最大线程数查看系统支…

探秘DevSecOps黄金管道,安全与效率的完美融合

软件应用的安全性已成为企业和用户关注的焦点&#xff0c;DevSecOps作为一种将安全融入开发和运维全过程的理念和实践&#xff0c;旨在消除传统开发模式中安全被后置处理的弊端。DevSecOps黄金管道&#xff08;Golden Pipeline&#xff09;是实现这一理念的核心框架&#xff0c…