苍穹外卖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 总结
先看接口文档,再看接口文档对应的数据库表,最后开始开发