基于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

相关文章

Java使用Spire.Doc for Java实现Word自动化插入图片

《Java使用Spire.DocforJava实现Word自动化插入图片》在日常工作中,Word文档是不可或缺的工具,而图片作为信息传达的重要载体,其在文档中的插入与布局显得尤为关键,下面我们就来... 目录1. Spire.Doc for Java库介绍与安装2. 使用特定的环绕方式插入图片3. 在指定位

MySQL基本表查询操作汇总之单表查询+多表操作大全

《MySQL基本表查询操作汇总之单表查询+多表操作大全》本文全面介绍了MySQL单表查询与多表操作的关键技术,包括基本语法、高级查询、表别名使用、多表连接及子查询等,并提供了丰富的实例,感兴趣的朋友跟... 目录一、单表查询整合(一)通用模版展示(二)举例说明(三)注意事项(四)Mapper简单举例简单查询

C#实现插入与删除Word文档目录的完整指南

《C#实现插入与删除Word文档目录的完整指南》在日常的办公自动化或文档处理场景中,Word文档的目录扮演着至关重要的角色,本文将深入探讨如何利用强大的第三方库Spire.Docfor.NET,在C#... 目录Spire.Doc for .NET 库:Word 文档处理利器自动化生成:C# 插入 Word

Python多任务爬虫实现爬取图片和GDP数据

《Python多任务爬虫实现爬取图片和GDP数据》本文主要介绍了基于FastAPI开发Web站点的方法,包括搭建Web服务器、处理图片资源、实现多任务爬虫和数据可视化,同时,还简要介绍了Python爬... 目录一. 基于FastAPI之Web站点开发1. 基于FastAPI搭建Web服务器2. Web服务

MySQL 批量插入的原理和实战方法(快速提升大数据导入效率)

《MySQL批量插入的原理和实战方法(快速提升大数据导入效率)》在日常开发中,我们经常需要将大量数据批量插入到MySQL数据库中,本文将介绍批量插入的原理、实现方法,并结合Python和PyMySQ... 目录一、批量插入的优势二、mysql 表的创建示例三、python 实现批量插入1. 安装 PyMyS

Java轻松实现在Excel中插入、提取或删除文本框

《Java轻松实现在Excel中插入、提取或删除文本框》在日常的Java开发中,我们经常需要与Excel文件打交道,当涉及到Excel中的文本框时,许多开发者可能会感到棘手,下面我们就来看看如何使用J... 目录Java操作Excel文本框的实战指南1. 插入Excel文本框2. 提取Excel文本框内容3

C++简单日志系统实现代码示例

《C++简单日志系统实现代码示例》日志系统是成熟软件中的一个重要组成部分,其记录软件的使用和运行行为,方便事后进行故障分析、数据统计等,:本文主要介绍C++简单日志系统实现的相关资料,文中通过代码... 目录前言Util.hppLevel.hppLogMsg.hppFormat.hppSink.hppBuf

java对接Pinata上传文件到IPFS全过程

《java对接Pinata上传文件到IPFS全过程》本文详细介绍了如何使用PinataAPI将文件上传到IPFS网络,首先登录Pinata官网并生成JWT令牌,然后在项目中导入OkHttp依赖并编写代... 目录1.登录2.生成令牌3.导入依赖4.编写代码5.调用接口调试China编程代码总结Pinata调用AP

利用Python将PDF文件转换为PNG图片的代码示例

《利用Python将PDF文件转换为PNG图片的代码示例》在日常工作和开发中,我们经常需要处理各种文档格式,PDF作为一种通用且跨平台的文档格式,被广泛应用于合同、报告、电子书等场景,然而,有时我们需... 目录引言为什么选择 python 进行 PDF 转 PNG?Spire.PDF for Python

linux系统中java的cacerts的优先级详解

《linux系统中java的cacerts的优先级详解》文章讲解了Java信任库(cacerts)的优先级与管理方式,指出JDK自带的cacerts默认优先级更高,系统级cacerts需手动同步或显式... 目录Java 默认使用哪个?如何检查当前使用的信任库?简要了解Java的信任库总结了解 Java 信