【苍穹外卖】Day3 菜品接口

2024-09-03 17:36
文章标签 接口 day3 外卖 苍穹 菜品

本文主要是介绍【苍穹外卖】Day3 菜品接口,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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:

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

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(视图对象)

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

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

修改菜品:

这篇关于【苍穹外卖】Day3 菜品接口的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1133593

相关文章

MybatisPlus service接口功能介绍

《MybatisPlusservice接口功能介绍》:本文主要介绍MybatisPlusservice接口功能介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录Service接口基本用法进阶用法总结:Lambda方法Service接口基本用法MyBATisP

Java中的Closeable接口及常见问题

《Java中的Closeable接口及常见问题》Closeable是Java中的一个标记接口,用于表示可以被关闭的对象,它定义了一个标准的方法来释放对象占用的系统资源,下面给大家介绍Java中的Clo... 目录1. Closeable接口概述2. 主要用途3. 实现类4. 使用方法5. 实现自定义Clos

java对接第三方接口的三种实现方式

《java对接第三方接口的三种实现方式》:本文主要介绍java对接第三方接口的三种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录HttpURLConnection调用方法CloseableHttpClient调用RestTemplate调用总结在日常工作

Java 的 Condition 接口与等待通知机制详解

《Java的Condition接口与等待通知机制详解》在Java并发编程里,实现线程间的协作与同步是极为关键的任务,本文将深入探究Condition接口及其背后的等待通知机制,感兴趣的朋友一起看... 目录一、引言二、Condition 接口概述2.1 基本概念2.2 与 Object 类等待通知方法的区别

SpringBoot实现接口数据加解密的三种实战方案

《SpringBoot实现接口数据加解密的三种实战方案》在金融支付、用户隐私信息传输等场景中,接口数据若以明文传输,极易被中间人攻击窃取,SpringBoot提供了多种优雅的加解密实现方案,本文将从原... 目录一、为什么需要接口数据加解密?二、核心加解密算法选择1. 对称加密(AES)2. 非对称加密(R

Java对接Dify API接口的完整流程

《Java对接DifyAPI接口的完整流程》Dify是一款AI应用开发平台,提供多种自然语言处理能力,通过调用Dify开放API,开发者可以快速集成智能对话、文本生成等功能到自己的Java应用中,本... 目录Java对接Dify API接口完整指南一、Dify API简介二、准备工作三、基础对接实现1.

Java controller接口出入参时间序列化转换操作方法(两种)

《Javacontroller接口出入参时间序列化转换操作方法(两种)》:本文主要介绍Javacontroller接口出入参时间序列化转换操作方法,本文给大家列举两种简单方法,感兴趣的朋友一起看... 目录方式一、使用注解方式二、统一配置场景:在controller编写的接口,在前后端交互过程中一般都会涉及

usb接口驱动异常问题常用解决方案

《usb接口驱动异常问题常用解决方案》当遇到USB接口驱动异常时,可以通过多种方法来解决,其中主要就包括重装USB控制器、禁用USB选择性暂停设置、更新或安装新的主板驱动等... usb接口驱动异常怎么办,USB接口驱动异常是常见问题,通常由驱动损坏、系统更新冲突、硬件故障或电源管理设置导致。以下是常用解决

go中空接口的具体使用

《go中空接口的具体使用》空接口是一种特殊的接口类型,它不包含任何方法,本文主要介绍了go中空接口的具体使用,具有一定的参考价值,感兴趣的可以了解一下... 目录接口-空接口1. 什么是空接口?2. 如何使用空接口?第一,第二,第三,3. 空接口几个要注意的坑坑1:坑2:坑3:接口-空接口1. 什么是空接

如何用java对接微信小程序下单后的发货接口

《如何用java对接微信小程序下单后的发货接口》:本文主要介绍在微信小程序后台实现发货通知的步骤,包括获取Access_token、使用RestTemplate调用发货接口、处理AccessTok... 目录配置参数 调用代码获取Access_token调用发货的接口类注意点总结配置参数 首先需要获取Ac