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

苍穹外卖day4套餐管理新增接口个人实现及思考过程记录

文章目录

      • 1.新增接口
        • 1.1 查看新增接口前端传递的参数格式
        • 1.2 设计Controller
        • 1.3 设计Service接口实现类
        • 1.4 Mapper实现
      • 2.根据分类id查询菜品接口
        • 2.1 Controller
        • 2.2 Service
        • 2.3 Mapper
      • 3 总结

1.新增接口

1.1 查看新增接口前端传递的参数格式

在这里插入图片描述
发现这里的前端请求体,主要关联数据库中的setmeal表和setmeal_dish
因此后端接收数据需要自己定义一个DTO接收

1.2 设计Controller

SetMealController

@RestController
@Api(tags = "套餐相关接口")
@RequestMapping("/admin/setmeal")
@Slf4j
public class SetMealController {

    @Autowired
    SetmealService setmealService;

    @PostMapping
    @ApiOperation("新增套餐")
    public Result save(@RequestBody SetmealDTO setmealDTO) {
        setmealService.saveWithDish(setmealDTO);
        return Result.success();
    }
}

这里的SetMealDTO和前端传递的参数一一对应,苍穹外卖项目已存在该DTO

1.3 设计Service接口实现类

接口

package com.sky.service;

import com.sky.dto.SetmealDTO;

public interface SetmealService {
    void saveWithDish(SetmealDTO setmealDTO);
}

实现类

@Service
@Slf4j
public class SetmealServiceImpl implements SetmealService {
    @Autowired
    private SetmealMapper setmealMapper;

    @Autowired
    private SetmealDishMapper setmealDishMapper;

    @Override
    @Transactional
    public void saveWithDish(SetmealDTO setmealDTO) {
        // 将前端数据插入套餐表
        Setmeal setmeal = new Setmeal();
        BeanUtils.copyProperties(setmealDTO, setmeal);
        setmealMapper.insert(setmeal);
        // 将前端数据插入setmeal_dish表
        Long id = setmeal.getId(); // 这里得到的id是套餐和菜品关联的id
        List<SetmealDish> setmealDishList = setmealDTO.getSetmealDishes();
        if (setmealDishList != null && setmealDishList.size() > 0) {
            setmealDishList.forEach(setmealDish -> {
                setmealDish.setSetmealId(id); // 菜品和套餐关联的id设置进去
            });
            // 向套餐表中插入n条数据
            setmealDishMapper.insertBatch(setmealDishList);
        }


    }
}
1.4 Mapper实现

SetmealMapper接口

@Mapper
public interface SetmealMapper {
    @AutoFill(value = OperationType.INSERT)
    void insert(Setmeal setmeal);
}

SetmealMapper实现

<?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" parameterType="Setmeal" useGeneratedKeys="true" keyProperty="id">
        insert into setmeal (category_id, name, price, description, image, create_time, update_time, create_user, update_user, status)
        values
        (#{categoryId}, #{name}, #{price}, #{description}, #{image}, #{createTime}, #{updateTime}, #{createUser}, #{updateUser}, #{status})
    </insert>
</mapper>

SetmealDishMapper接口

@Mapper
public interface SetmealDishMapper {
    void insertBatch(List<SetmealDish> setmealDishList);
}

SetmealDishMapper实现

    <insert id="insertBatch">
        insert into setmeal_dish (setmeal_id, dish_id, name, price, copies)  VALUES
        <foreach collection="setmealDishList" item="sd" separator=",">
            (#{sd.setmealId}, #{sd.dishId}, #{sd.name}, #{sd.price}, #{sd.copies})
        </foreach>
    </insert>

2.根据分类id查询菜品接口

这个一开始没有考虑到,不写的话下面的数据无法渲染出来
在这里插入图片描述

2.1 Controller
/**
     * 根据分类id查询菜品
     * @param categoryId
     * @return
*/
@GetMapping("/list")
@ApiOperation("根据分类id查询菜品")
public Result<List<Dish>> list(Long categoryId){
    List<Dish> list = dishService.list(categoryId);
    return Result.success(list);
}
2.2 Service
/**
     * 根据分类id查询菜品
     * @param categoryId
     * @return
*/
List<Dish> list(Long categoryId);

Impl

    /**
     * 根据分类id查询菜品
     * @param categoryId
     * @return
     */
    @Override
    public List<Dish> findAllDish(Long categoryId) {
        List<Dish> list = dishMapper.queryAll(categoryId);
        return list;
    }
2.3 Mapper
/**
     * 动态条件查询菜品
     * @param dish
     * @return
*/
List<Dish> list(Dish dish);

xml

<select id="list" resultType="Dish" parameterType="Dish">
    select * from dish
    <where>
        <if test="name != null">
            and name like concat('%',#{name},'%')
        </if>
        <if test="categoryId != null">
            and category_id = #{categoryId}
        </if>
        <if test="status != null">
            and status = #{status}
        </if>
    </where>
    order by create_time desc
</select>

3 总结

先看接口文档,再看接口文档对应的数据库表,最后开始开发

http://www.dtcms.com/a/36636.html

相关文章:

  • MaxKB+Ollama+DeepSeek1.5B部署知识库
  • DeepSeek-V3 论文总结
  • React进阶之React核心源码解析(三)
  • Jtti.cc:站群服务器SEO优化建议,如何分配多IP?
  • Java进阶:SpringMVC中放行静态资源
  • Go小技巧易错点100例(二十二)
  • Spring Boot 与 MyBatis 数据库操作
  • 【Java】I/O 流篇 —— 缓冲流
  • 什么是以知识为中心的服务(KCS)?最佳实践是什么?
  • STM32+ESP8266局域网通信
  • 【Java项目】基于Spring Boot的交流互动系统
  • 【工欲善其事】2025 年实现听书自由——基于 Kokoro-82M 的开源 TTS 工具 audiblez 本地部署实战
  • AI多模态梳理与应用思考|从单文本到多视觉的生成式AI的AGI关键路径
  • msc2n修改物料有效期
  • 【算法】 ‘abb‘ 型子序列问题——前后缀分解 python
  • 【红队利器】单文件一键结束火绒6.0
  • 2025最新最全【大模型学习路线规划】零基础入门到精通_大模型 开发 学习路线
  • C语言 —— 此去经年 应是良辰好景虚设 - 函数
  • Deepseek 实战全攻略,领航科技应用的深度探索之旅
  • R Excel 文件:高效数据处理的利器
  • 基于SpringBoot+mybatisplus+vueJS的高校选课系统设计和实现
  • [AI]【Comfyui】 生成基本流程图的步骤保姆记录
  • 华为2025年技术发布会:智能汽车核心技术大爆发
  • Go 之 语言基本类型
  • 从0-1学习Mysql第三章: 数据类型
  • 基于Spring Boot的健康医院门诊在线挂号系统设与实现(LW+源码+讲解)
  • angular新闻列表分页
  • WPS计算机二级•文档的页面设置与打印
  • Spring参数的问题
  • P8597 [蓝桥杯 2013 省 B] 翻硬币