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博客

新增套餐

需求分析和设计

在页面原型中看到

业务规则:

  • 套餐名称必须是唯一的

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

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

接口设计:

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

  • 文件上传(已完成)

  • 新增套餐

  • 根据分类id查询菜品

代码开发

根据分类id查询菜品

Controller层
java 复制代码
 //根据分类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层
java 复制代码
 //根据分类id查询菜品
    List<Dish> getByCategoryId(Long categoryId);
ServiceImpl层
java 复制代码
//根据分类id查询菜品
    @Override
    public List<Dish> getByCategoryId(Long categoryId) {
        return dishMapper.getByCategoryId(categoryId);
    }
Mapper层
java 复制代码
 //根据分类id查询菜品

    List<Dish> getByCategoryId(Long categoryId);
DishMapper.xml
java 复制代码
  <select id="getByCategoryId" resultType="com.sky.entity.Dish">
        select *from dish
        where status=1
        <if test="categoryId!=null">
            and category_id=#{categoryId}
        </if>
        order by create_time desc
    </select>

新增套餐

实体类

在sky-pojo的DTO中新建SetmealDTO

java 复制代码
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;

    //分类id
    private 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中

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

在sky-server中

java 复制代码
 //新增套餐
    void saveWithDish(SetmealDTO setmealDTO);
ServiceImpl层
java 复制代码
 //新增套餐
    @Override
    public 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层
java 复制代码
 //插入套餐数据
    @AutoFill(value = OperationType.INSERT)
    void insert(Setmeal setmeal);
SetmealMapper.xml
java 复制代码
<?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
java 复制代码
<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模块中

java 复制代码
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;

    //分类id
    private Integer categoryId;

    //状态 0表示禁用 1表示启用
    private Integer status;

}

Controller层

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

Service层

java 复制代码
 //套餐分页查询
    PageResult pageQuery(SetmealPageQueryDTO setmealPageQueryDTO);

ServiceImpl

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

Mapper

java 复制代码
 //套餐分页查询
    Page<SetmealVO> pageQuery(SetmealPageQueryDTO setmealPageQueryDTO);

SetmealMapper.xml

java 复制代码
<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>

功能测试

相关推荐
wangmengxxw7 分钟前
Maven的介绍及基本使用
java·maven
Java水解15 分钟前
PostgreSQL向量库pgvector实战指南
后端·postgresql
KIDAKN28 分钟前
RabbitMQ 可靠传输性(包括消息确认, 持久性和发送方确认)
java·rabbitmq·java-rabbitmq
fantasy_arch29 分钟前
SVT-AV1编码器中实现WPP依赖管理核心调度
java·前端·av1
Ophelia(秃头版36 分钟前
经典设计模式:单例模式、工厂模式
java·开发语言·单例模式
Chan1641 分钟前
消息推送的三种常见方式:轮询、SSE、WebSocket
java·网络·websocket·网络协议·http·sse
Dear.爬虫1 小时前
Golang中逃逸现象, 变量“何时栈?何时堆?”
开发语言·后端·golang
小薛博客2 小时前
22、Jenkins容器化部署Java应用
java·运维·jenkins
西贝爱学习2 小时前
如何在 IntelliJ IDEA 中进行全局替换某个字段(或文本)
java·ide·intellij-idea
南部余额2 小时前
Spring 基于注解的自动化事务
java·spring·自动化