前言
目录
新增套餐
需求分析和设计
代码开发
根据分类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查询菜品
@Override
public 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 dish
where 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;
//分类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中
//新增套餐
@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层
//新增套餐
@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层
//插入套餐数据
@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;
//分类id
private 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
//套餐分页查询
@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
//套餐分页查询
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>