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

苍穹外卖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.kler.cn/a/562212.html

相关文章:

  • 孔夫子旧书网item_search_sold接口测试:基于Python的全面指南
  • node.js的版本管理
  • SSH.NET: .NET 平台上的安全 Shell 库
  • DeepSeek05-大模型WebUI
  • 【C语言】指针笔试题
  • 硬件工程师入门教程
  • 4、GPU与CPU:计算硬件与大模型训练
  • Linux相关知识(文件系统、目录树、权限管理)和Shell相关知识(字符串、数组)
  • 5G网络切片辨析(eMBB,mMTC,uRLLC)
  • 外卖平台系统源码开发详解:如何实现灵活的商户管理与订单调度
  • vue2 ruoyi websocket轮询
  • Linux 内核 RDMA CM 模块分析:drivers/infiniband/core/cma.c
  • C++之string类的模拟实现(超详细)
  • 计算机视觉算法实战——文档扫描与 OCR(主页有源码)
  • 电脑软件:推荐一款非常强大的视频音频转换剪辑工具FFmpeg Batch AV Converter V3.12
  • matlab学习之路
  • Socket编程基础
  • Web核心、HTTP
  • Python爬虫实战:自动抓取微博热搜并根据帖子生成词云图
  • halcon三维点云数据处理(二十七)remove_bin_for_3d_object_localization