铭做网站建设品牌推广宣传词
文章目录
- 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 {@AutowiredSetmealService 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 {@Autowiredprivate SetmealMapper setmealMapper;@Autowiredprivate SetmealDishMapper setmealDishMapper;@Override@Transactionalpublic void saveWithDish(SetmealDTO setmealDTO) {// 将前端数据插入套餐表Setmeal setmeal = new Setmeal();BeanUtils.copyProperties(setmealDTO, setmeal);setmealMapper.insert(setmeal);// 将前端数据插入setmeal_dish表Long id = setmeal.getId(); // 这里得到的id是套餐和菜品关联的idList<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*/@Overridepublic 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 总结
先看接口文档,再看接口文档对应的数据库表,最后开始开发