写给像我一样完完全全的小白的。本人代码水平一塌糊涂,前几天就是机械地跟着视频敲代码。对于Day04的作业本来感觉代码抓瞎一点不会写,尽力去理解业务逻辑后发现好像也没那么难,整体代码可以仿照Day03新增菜品来进行实现!
一、功能一——新增套餐
1. 根据分类id查询对应哪些菜品,返回菜品列表List<Dish>
(1)思路梳理
“根据分类id查询该分类下对应了哪些菜品”这个接口实现下图这部分功能
现在我们有了分类列表category、也有了菜品列表dish,即将完善的是套餐列表setmeal和套餐对应的菜品列表setmeal_dish。
分类列表category如下图所示:
分类列表的type列描述了分类的类型,其中1表示菜品分类,2表示套餐分类。只有type=2的分类id会出现在setmeal表中。setmeal表的具体内容如下图所示:
dish表中对应的category_id是这道菜所归属的菜品分类的id,它不包含13和15的,因为13和15是category中标志着“套餐分类”的id。dish表的内容如下图所示。
根据黑马资料里给出的数据库设计文档(如下图所示),setmeal_dish表整合了setmeal表对应的id、dish表对应的id,用来表示“A套餐(通过setmeal_id来标记)由归属于C菜品、D菜品和E菜品等组成(C、D、E等菜品分别有自己的dish_id,而dish表中又有它们分别对应的category_id)”。
(2)代码实现
1)DishController
返回类型是一个列表,通过category_id查询当前类别中有哪些菜品。所以category_id做参数。
/*** 根据分类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)DishService
在DishService.java的接口类中记录list方法
/*** 根据分类id查询菜品* @param categoryId* @return
*/
List<Dish> list(Long categoryId);
3)DishServiceImpl
在实现类中,具体地实现list方法,能够根据分类id查询到菜品,并且以列表的形式返回。这里创建了一个 Dish 对象,使用了建造者模式(Builder Pattern)来构建对象。①categoryId(categoryId) 设置了菜品对象的分类ID属性为传入的 categoryId 参数;②status(StatusConstant.ENABLE) 设置了菜品对象的状态为启用状态,这里使用了一个常量 StatusConstant.ENABLE 来表示启用状态;③build() 方法用于构建 Dish 对象。
/*** 根据分类id查询菜品* @param categoryId* @return
*/
public List<Dish> list(Long categoryId) {Dish dish = Dish.builder().categoryId(categoryId).status(StatusConstant.ENABLE).build();return dishMapper.list(dish);
}
接下来我们还需要在DishMapper中声明**“根据传入的动态dish信息,将查询到的菜品以列表形式返回”**的方法,并在DishMapper.xml中具体实现这一功能。
4)DishMapper
/*** 动态条件查询菜品* @param dish* @return
*/
List<Dish> list(Dish dish);
5)DishMapper.xml
对传入的name、category_id、status分别做判断
<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>
到这里,根据分类id查询菜品的功能就已经完成了!