项目1菜品分页查询功能
先看效果图(图片没有显示出来因为阿里云OSS关闭了)
接下来我们进行开发:
第一步:我们需要阅读yapi接口文档,分析需求,请求的类型以及响应什么内容
第二步:分析好需求,我们进行代码开发:
/**
* 菜品分页查询
* @param dishPageQueryDTO
* @return
*/
@GetMapping("/page")
@ApiOperation("菜品分页查询")
public Result<PageResult> page(DishPageQueryDTO dishPageQueryDTO){
log.info("菜品分页查询:{}", dishPageQueryDTO);
PageResult pageResult = dishService.pageQuery(dishPageQueryDTO);
return Result.success(pageResult);
}
确定好请求get路径/page,前面我们分析接口文档得知,我们需要返回total以及records,所以响应的类型为Result<PageResult>,而PageResult中封装的就是total以及records,然后我们调用Service层
@Override
public PageResult pageQuery(DishPageQueryDTO dishPageQueryDTO) {
PageHelper.startPage(dishPageQueryDTO.getPage(),dishPageQueryDTO.getPageSize());
Page<DishVO> page = dishMapper.pageQuery(dishPageQueryDTO);
PageResult pageResult = new PageResult(page.getTotal(),page.getResult());
return pageResult;
}
利用Pagehelper插件,简化我们的分页的查询操作,这里要注意的是:Page里的泛型是DIshVO(封装了分类的名字categoryName)而不是Dish,因为接口文档表明了我们必须返回categoryName我们才能在分页中显示菜品的分类名称字段,然后就是调用Mapper持久层
<select id="pageQuery" resultType="com.sky.vo.DishVO">
select d.*,c.name categoryName from `sky-take-out`.dish d left join `sky-take-out`.category c
on d.category_id = c.id
<where>
<if test="name != null">
and d.name like concat('%',#{name},'%')
</if>
<if test="categoryId != null">
and d.category_id = #{categoryId}
</if>
<if test="status != null">
and d.status = #{status}
</if>
</where>
</select>
mapper层的方法名我们就不多说了,我们使用了xml映射,因为有些查询字段不是必须的比如菜品名称,售卖状态,菜品分类.这里的SQL语句最需要注意的细节是我们查询c.name(分类名称),我们需要给他起个别名categoryName,否则Mybatis框架无法自动封装到DishVO的categoryName属性
总结:
那到此我们的代码就完毕了,可以通过swagger和前后端联调进行测试,在开头的地方已经给大家展示了,谢谢大家