苍穹外卖-菜品管理(菜品分页查询)(五)

**需求分析和设计**
业务规则:
  根据页码展示菜品信息  
  每页展示10条数据
  分页查询时可以根据需要输入菜品名称、菜品分类、菜品状态进行查询
根据菜品分页查询接口定义设计对应的VO  DishVO
关于菜品分页查询,因为传进去的参数是Query类型,而不是Json所以不用@RequestBody
**关于分页查询**

DishVO除了基础属性之外还有一个categoryName
调用方法处理DTO返回VO
好/现在捋一下思路/Dish普通的实体类,DTO比实体类多一个口味的数组而VO有口味数组还有分类名,实体类只是只有分类id
PageResult包含两个属性  总记录数total  和list当前页数据的集合
controller层调用service层分页方法,还返回了一个pageResult用于controller层的成功success返回结果。
调用service层接口,用impl中的方法实现接口,分页查询的插件pagehelper不多说了
层层调度参数为pageQuerydto故只包含必要的page和size菜品名分类id和状态
PageHelper.startPage(dishPageQueryDTO.getPage(), dishPageQueryDTO.getPageSize());
传进去参数为dto获得的page当前页数和pagesize每页显示记录数
调用mapper层的分页查询方法(分页dto参数),赋值给每页显示的数据的一个列表Page<DishVO>此时取名变量为page
这个Page列表和ArrayList极其相似,是专为分页定义的分页列表class继承了ArrayList
最后返回值给PageResult传参为total(总记录数)和getResult结果(当前页数据集合)

Controller层代码DishController
```

    @GetMapping("/page")
    @ApiOperation("菜品分页拆查询")
    public Result<PageResult> page(DishPageQueryDTO dishPageQueryDTO){
        log.info("菜品分页查询{}",dishPageQueryDTO);
        PageResult pageResult = dishService.pageQuery(dishPageQueryDTO);  

        return Result.success(pageResult);
    }
```
DishService
```
    PageResult pageQuery(DishPageQueryDTO dishPageQueryDTO);

```

DishServiceimpl  第一个参数是页码,在DishPageQueryDTO中有了就是Page
```plaintext

    public PageResult pageQuery(DishPageQueryDTO dishPageQueryDTO) {
        PageHelper.startPage(dishPageQueryDTO.getPage(), dishPageQueryDTO.getPageSize());
        Page<DishVO> page = dishMapper.pageQuery(dishPageQueryDTO);
        return new PageResult(page.getTotal(), page.getResult());
    }
```

数据库查询菜品以及菜品的分类名称返回给VO,传进来的参数是分页PageDTO(不包含菜品分类名称)
使用到左外连接,查询dto全部以及分类表的名字,条件分类菜品的分类id = 分类表的id
这里遇到一个问题,就是查询出来的表有两个name一个是菜品name还一个是分类名称name
就要给字段起别名`select` d.*,c.name as categoryName from dish d `left outer join` category c `on` d.category_id = c.id
写进xml还有一个动态的条件判断,用where标签,然后if条件判断是否为空,因为传进来的参数是dto所以就三个属性判断除了page和pagesize
就判断name,categoryid和status  通过名称来查询菜品
因为根据名称查询,所以一般为模糊查询使用like就不用 = 
DishMapper.xml
```
 <select id="pageQuery" 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
        <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>
        order by d.create_time desc
    </select>
```
 

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值