当前位置: 首页 > news >正文

7--苍穹外卖-SpringBoot项目中套餐管理 详解(一)

前言

目录

新增套餐

需求分析和设计

代码开发

根据分类id查询菜品

Controller层

Service层

ServiceImpl层

Mapper层

DishMapper.xml

新增套餐

实体类

mapper层

Service层

 ServiceImpl层

Mapper层

SetmealMapper.xml

 setmealDishMapper.xml

套餐分页查询

需求分析和设计

代码开发

设计DTO类

Controller层

Service层

ServiceImpl

Mapper

SetmealMapper.xml

功能测试


   
1--苍穹外卖-SpringBoot项目介绍及环境搭建 详解-CSDN博客

2--苍穹外卖-SpringBoot项目中员工管理 详解(一)-CSDN博客

3--苍穹外卖-SpringBoot项目中员工管理 详解(二)-CSDN博客

4--苍穹外码-SpringBoot项目中分类管理 详解-CSDN博客

5--苍穹外卖-SpringBoot项目中菜品管理 详解(一)-CSDN博客

6--苍穹外卖-SpringBoot项目中菜品管理 详解(二)-CSDN博客

7--苍穹外卖-SpringBoot项目中套餐管理 详解(一)-CSDN博客

8--苍穹外卖-SpringBoot项目中套餐管理 详解(二)-CSDN博客

9--苍穹外卖-SpringBoot项目中Redis的介绍及其使用实例 详解-CSDN博客

10--苍穹外卖-SpringBoot项目中微信登录 详解-CSDN博客

新增套餐

需求分析和设计

 在页面原型中看到

业务规则:

  • 套餐名称必须是唯一的

  • 新增套餐时可以根据情况选择需要添加的菜品

  • 每个套餐必须对应一张图片

接口设计:

  • 根据类型查询分类(已完成)

  • 文件上传(已完成)

  • 新增套餐

  • 根据分类id查询菜品

代码开发

根据分类id查询菜品

Controller层
 //根据分类id查询菜品@GetMapping("/list")@ApiOperation("根据分类id查询菜品")public Result<List<Dish>> getByCategoryId(Long categoryId){log.info("根据分类id查询菜品;{}",categoryId);List<Dish> list=dishService.getByCategoryId(categoryId);return Result.success(list);}
Service层
 //根据分类id查询菜品List<Dish> getByCategoryId(Long categoryId);
ServiceImpl层
//根据分类id查询菜品@Overridepublic List<Dish> getByCategoryId(Long categoryId) {return dishMapper.getByCategoryId(categoryId);}
Mapper层
 //根据分类id查询菜品List<Dish> getByCategoryId(Long categoryId);
DishMapper.xml
  <select id="getByCategoryId" resultType="com.sky.entity.Dish">select *from dishwhere status=1<if test="categoryId!=null">and category_id=#{categoryId}</if>order by create_time desc</select>

新增套餐

实体类

在sky-pojo的DTO中新建SetmealDTO

package com.sky.dto;import com.sky.entity.SetmealDish;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;@Data
public class SetmealDTO implements Serializable {private Long id;//分类idprivate Long categoryId;//套餐名称private String name;//套餐价格private BigDecimal price;//状态 0:停用 1:启用private Integer status;//描述信息private String description;//图片private String image;//套餐菜品关系private List<SetmealDish> setmealDishes = new ArrayList<>();}
mapper层

在sky-server中

//新增套餐@PostMapping@ApiOperation("新增套餐")public Result<String> save(@RequestBody SetmealDTO setmealDTO){log.info("新增套餐:{}",setmealDTO);setmealService.saveWithDish(setmealDTO);return Result.success();}
Service层

在sky-server中

 //新增套餐void saveWithDish(SetmealDTO setmealDTO);
 ServiceImpl层
 //新增套餐@Overridepublic void saveWithDish(SetmealDTO setmealDTO) {Setmeal setmeal = new Setmeal();BeanUtils.copyProperties(setmealDTO,setmeal);//向套餐表中插入1条数据setmealMapper.insert(setmeal);//获取insert语句生成的主键值Long setmealId = setmeal.getId();List<SetmealDish> setmealDishes = setmealDTO.getSetmealDishes();/* setmealDishes.forEach(setmealDish -> {setmealDish.setDishId(setmealId);*/setmealDishes.forEach(setmealDish -> {setmealDish.setDishId(setmealId);});//向套餐关联的菜品表中插入n条数据SetmealDishMapper.insertBatch(setmealDishes);}
Mapper层
 //插入套餐数据@AutoFill(value = OperationType.INSERT)void insert(Setmeal setmeal);
SetmealMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.sky.mapper.SetmealMapper"><insert id="insert" useGeneratedKeys="true" keyProperty="id">
insert into setmeal(category_id, name, price, description, image,create_time, update_time, create_user, update_user)
VALUES (#{categoryId},#{name},#{price},#{description},#{image},#{createTime},#{updateTime},#{createUser},#{updateUser})</insert>
</mapper>
 setmealDishMapper.xml
<insert id="insertBatch">insert into setmeal_dish(setmeal_id, dish_id, name, price, copies)VALUES<foreach collection="setmealDishs" item="sd" separator=",">(#{sd.setmealId},#{sd.dishId},#{sd.name},#{sd.price},#{sd.copies})</foreach></insert>

套餐分页查询

需求分析和设计

业务规则:

  • 根据页码展示菜品信息

  • 每页展示10条数据

  • 分页查询时可以根据需要输入套餐名称、套餐分类、套餐状态进行查询

代码开发

设计DTO类

根据菜品分页查询接口定义设计对应的DTO:

在sky-pojo模块中

package com.sky.dto;import lombok.Data;import java.io.Serializable;@Data
public class SetmealPageQueryDTO implements Serializable {private int page;private int pageSize;private String name;//分类idprivate Integer categoryId;//状态 0表示禁用 1表示启用private Integer status;}

Controller层

 //套餐分页查询@GetMapping("/page")@ApiOperation("套餐分页查询")public Result<PageResult> page(SetmealPageQueryDTO setmealPageQueryDTO){log.info("套餐分页查询:{}",setmealPageQueryDTO);PageResult pageResult=setmealService.pageQuery(setmealPageQueryDTO);return Result.success(pageResult);}

Service层

 //套餐分页查询PageResult pageQuery(SetmealPageQueryDTO setmealPageQueryDTO);

ServiceImpl

//套餐分页查询@Overridepublic PageResult pageQuery(SetmealPageQueryDTO setmealPageQueryDTO) {PageHelper.startPage(setmealPageQueryDTO.getPage(),setmealPageQueryDTO.getPageSize());Page<SetmealVO> page=setmealMapper.pageQuery(setmealPageQueryDTO);return new PageResult(page.getTotal(),page.getResult());}

Mapper

 //套餐分页查询Page<SetmealVO> pageQuery(SetmealPageQueryDTO setmealPageQueryDTO);

SetmealMapper.xml

<select id="pageQuery" resultType="com.sky.vo.SetmealVO">select s.*,c.name as categoryName from setmeal s left join category c on s.category_id=c.id<where><if test="name!=null and name!=''">and s.name like concat('%',#{name},'%')</if><if test="categoryId!=null">and s.category_id=#{categoryId}</if><if test="status!=null ">and s.status=#{status}</if></where>order by s.create_time desc</select>

功能测试

http://www.lryc.cn/news/452182.html

相关文章:

  • 【尚硅谷】RocketMQ 消息队列学习笔记
  • C题(三)芝麻开门 --- strcmp函数应用
  • C++函数模板、选择排序实现(从大到小)
  • EasyExcel使用介绍
  • 字段临时缓存包装器
  • Python(三)——列表
  • MySQL--三大范式(超详解)
  • 追梦无Bug的软件世界
  • 在C#中使用Redis实现高效消息队列
  • 微服务JMeter解析部署使用全流程
  • Python 从入门到实战32(数据库MySQL)
  • hrnet训练的pt模型结合目标检测进行关键点识别的更准确前向推理
  • Leetcode 3306. Count of Substrings Containing Every Vowel and K Consonants II
  • 算法笔记(五)——分治
  • 多级侧边菜单(递归)
  • JavaScript break与continue语句
  • 算法【从递归入手一维动态规划】
  • Linux中的进程间通信之共享内存
  • 第18周 3-过滤器
  • Linux之进程概念
  • 小程序-使用npm包
  • 【springboot】整合沙箱支付
  • 技术速递|Python in Visual Studio Code 2024年9月发布
  • 数据结构-3.5.队列的顺序实现
  • preconnect 预解析
  • Leecode热题100-283.移动零
  • 如何高效使用Prompt与AI大模型对话
  • Java 之深入理解 String、StringBuilder、StringBuffer
  • vue3项目执行pnpm update后还原package.json文件后运行报错
  • 蓝桥杯【物联网】零基础到国奖之路:十七. 扩展模块之单路ADC和NE555