接口-菜品分页查询
业务内容
页面上菜品根据菜品名称、菜品分类、售卖状态三个字段进行分页查询。
在请求参数中携带了菜品名称、菜品分类、售卖状态三个字段参数。
返回PageResult类型的实体。
注意:在返回数据中在records下有个categoryName,这个字段的内容在category表中,除了这个字段的其他内容都在dish表中。所以我们定义了一个vo,DishVO
DishVO中包含了需要返回的dish表中的内容和从category表查出来的categoryName字段。
public class DishVO implements Serializable {
private Long id;
//菜品名称
private String name;
//菜品分类id
private Long categoryId;
//菜品价格
private BigDecimal price;
//图片
private String image;
//描述信息
private String description;
//0 停售 1 起售
private Integer status;
//更新时间
private LocalDateTime updateTime;
//分类名称
private String categoryName;
//菜品关联的口味
private List<DishFlavor> flavors = new ArrayList<>();
//private Integer copies;
}
controller
@GetMapping("/page")
public Result<PageResult> DishPageQuery(DishPageQueryDTO dishPageQueryDTO){
log.info("分页查询参数:{}",dishPageQueryDTO);
PageResult pageResult = dishService.DishPageQuery(dishPageQueryDTO);
return Result.success(pageResult);
}
service
/**
* 菜品分页查询
* @param dishPageQueryDTO
* @return
*/
@Override
public PageResult DishPageQuery(DishPageQueryDTO dishPageQueryDTO) {
PageHelper.startPage(dishPageQueryDTO.getPage(),dishPageQueryDTO.getPageSize());
Page<DishVO> page = dishMapper.DishPageQuery(dishPageQueryDTO);
long total = page.getTotal();
List<DishVO> result = page.getResult();
return new PageResult(total, result);
}
mapper
注意:由于涉及两个表的内容,所以是多表join查询
返回resultType要注意是com.sky.vo.DishVO
多个查询条件要加and
<select id="DishPageQuery" resultType="com.sky.vo.DishVO">
select d.* , c.name as categoryName from dish d left outer join category c on d.category_id = c.id
<if test="name != null and name != ''">
and d.name like concat("%",#{name},"%")
</if>
<if test="categoryId != null and categoryId != ''">
and d.category_id=#{categoryId}
</if>
<if test="status != null and status != ''">
and d.status=#{status}
</if>
</select>