基于SSM的订餐系统--菜品新增(涉及多表插入,上传图片)

2023-11-09 08:50

本文主要是介绍基于SSM的订餐系统--菜品新增(涉及多表插入,上传图片),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

需求分析

在这里插入图片描述

后台系统可以管理菜品信息,通过新增功能来添加一个新的菜品,在添加菜品时需要选择当前菜品所属的分类,并且需要上传菜品图片,在客户端会按照菜品分类来展示对应的菜品信息。

新增菜品,其实就是将新增页面录入的菜品信息插入dish表,如果添加了口味做法,还需要向dish_flavor表插入数据。所以在新增菜品时,涉及两个表:
dish — 菜品表
dish_flavor—菜品口味表

在开发代码之前,我们先梳理一下新增菜品时前端页面和服务端的交互过程
1.页面发送ajax请求,请求服务端获取菜品分类数据并展示到下拉框中
2.页面发送请求进行图片上传,请求服务端将图片保存到服务器 (关注上文)
3.页面发送请求进行图片下载,将上传的图片进行回显(关注上文)
4.点击保存按钮,发送ajax请求,将菜品相关数据以json形式提交服务端

1.页面发送ajax请求,请求服务端获取菜品分类数据并展示到下拉框中,根据type参数进行查询,菜品分类type
为1,套餐分类type为2

 // 获取菜品分类getDishList () {getCategoryList({ 'type': 1 }).then(res => {if (res.code === 1) {this.dishList = res.data} else {this.$message.error(res.msg || '操作失败')}})}// 获取菜品分类列表
const getCategoryList = (params) => {return $axios({url: '/category/list',method: 'get',params})
}

controller:

@GetMapping("/list")public R<List<Category>> getCategoryList(Category category){LambdaQueryWrapper<Category> queryWrapper = new LambdaQueryWrapper<>();queryWrapper.eq(category.getType()!=null,Category::getType,category.getType());queryWrapper.orderByAsc(Category::getSort).orderByDesc(Category::getUpdateTime);List<Category> list = categoryService.list(queryWrapper);return R.success(list);}

4.点击保存按钮,发送ajax请求,将菜品相关数据以json形式提交服务端
在这里插入图片描述需要导入DishDto,用于封装页面提交的数据。
Dto: 即数据传输对象,一般用于表示层与服务层之间的数据传输。

Dto:

@Data
public class DishDto extends Dish {private List<DishFlavor> flavors = new ArrayList<>();
}

DishService:

public interface DishService extends IService<Dish> {//新增菜品,同时插入菜品对应的口味数据,需要操作dish和dish_flavorpublic void saveWithFlavor(DishDto dishDto);
}**DishServiceImpl:**
```java
@Service
@Slf4j
public class DishServiceImpl extends ServiceImpl<DishMapper, Dish> implements DishService {@Autowiredprivate DishFlavorService dishFlavorService;/*** 新增菜品,同时保存对应的口味数据* @param dishDto*/@Override@Transactional //涉及多张表,添加事务注解,public void saveWithFlavor(DishDto dishDto) {//保存菜品的基本信息到菜品表dishthis.save(dishDto);//获取菜品idLong dishId = dishDto.getId();//菜品口味List<DishFlavor> flavors = dishDto.getFlavors();//将菜品id加入flavors = flavors.stream().map((item)->{item.setDishId(dishId);return item;}).collect(Collectors.toList());//保存菜品口味至菜品口味表dish_flavordishFlavorService.saveBatch(flavors);}
}
**启动类添加@EnableTransactionManagement注解,开启事务管理:**
```java
@Slf4j //日志
@SpringBootApplication
@ServletComponentScan
@EnableTransactionManagement
public class ReggieApplication {public static void main(String[] args) {SpringApplication.run(ReggieApplication.class,args);log.info("项目启动成功");}
}

DishController:

 @PostMapping()public R<String> save(@RequestBody DishDto dishDto ){dishService.saveWithFlavor(dishDto);return R.success("保存成功");}

这篇关于基于SSM的订餐系统--菜品新增(涉及多表插入,上传图片)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

Python一次性将指定版本所有包上传PyPI镜像解决方案

《Python一次性将指定版本所有包上传PyPI镜像解决方案》本文主要介绍了一个安全、完整、可离线部署的解决方案,用于一次性准备指定Python版本的所有包,然后导出到内网环境,感兴趣的小伙伴可以跟随... 目录为什么需要这个方案完整解决方案1. 项目目录结构2. 创建智能下载脚本3. 创建包清单生成脚本4

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

基于C#实现PDF转图片的详细教程

《基于C#实现PDF转图片的详细教程》在数字化办公场景中,PDF文件的可视化处理需求日益增长,本文将围绕Spire.PDFfor.NET这一工具,详解如何通过C#将PDF转换为JPG、PNG等主流图片... 目录引言一、组件部署二、快速入门:PDF 转图片的核心 C# 代码三、分辨率设置 - 清晰度的决定因

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W