作品集制作网站,怎么做转载小说网站,代做网站毕业设计,华为荣耀手机商城官方网站3. 菜品分页查询
3.1 需求分析和设计
3.1.1 产品原型
系统中的菜品数据很多的时候#xff0c;如果在一个页面中全部展示出来会显得比较乱#xff0c;不便于查看#xff0c;所以一般的系统中都会以分页的方式来展示列表数据。
菜品分页原型#xff1a; 在菜品列表展示时… 3. 菜品分页查询
3.1 需求分析和设计
3.1.1 产品原型
系统中的菜品数据很多的时候如果在一个页面中全部展示出来会显得比较乱不便于查看所以一般的系统中都会以分页的方式来展示列表数据。
菜品分页原型 在菜品列表展示时除了菜品的基本信息(名称、售价、售卖状态、最后操作时间)外还有两个字段略微特殊第一个是图片字段 我们从数据库查询出来的仅仅是图片的名字图片要想在表格中回显展示出来就需要下载这个图片。第二个是菜品分类这里展示的是分类名称而不是分类ID此时我们就需要根据菜品的分类ID去分类表中查询分类信息然后在页面展示。
业务规则 根据页码展示菜品信息 每页展示10条数据 分页查询时可以根据需要输入菜品名称、菜品分类、菜品状态进行查询 3.1.2 接口设计
根据上述原型图设计出相应的接口。 3.2 代码开发
3.2.1 设计DTO类
根据菜品分页查询接口定义设计对应的DTO
在sky-pojo模块中已定义
package com.sky.dto;
import lombok.Data;
import java.io.Serializable;
Data
public class DishPageQueryDTO implements Serializable {
private int page;private int pageSize;private String name;private Integer categoryId; //分类idprivate Integer status; //状态 0表示禁用 1表示启用
} 3.2.2 设计VO类
根据菜品分页查询接口定义设计对应的VO
在sky-pojo模块中已定义
package com.sky.vo;
import com.sky.entity.DishFlavor;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
Data
Builder
NoArgsConstructor
AllArgsConstructor
public class DishVO implements Serializable {
private Long id;//菜品名称private String name;//菜品分类idprivate Long categoryId;//菜品价格private BigDecimal price;//图片private String image;//描述信息private String description;//0 停售 1 起售private Integer status;//更新时间private LocalDateTime updateTime;//分类名称private String categoryName;//菜品关联的口味private ListDishFlavor flavors new ArrayList();
} 3.2.3 Controller层
根据接口定义创建DishController的page分页查询方法 /*** 菜品分页查询** param dishPageQueryDTO* return*/GetMapping(/page)ApiOperation(菜品分页查询)public ResultPageResult page(DishPageQueryDTO dishPageQueryDTO) {log.info(菜品分页查询:{}, dishPageQueryDTO);PageResult pageResult dishService.pageQuery(dishPageQueryDTO);//后绪步骤定义return Result.success(pageResult);} 3.2.4 Service层接口
在 DishService 中扩展分页查询方法 /*** 菜品分页查询** param dishPageQueryDTO* return*/PageResult pageQuery(DishPageQueryDTO dishPageQueryDTO); 3.2.5 Service层实现类
在 DishServiceImpl 中实现分页查询方法 /*** 菜品分页查询** param dishPageQueryDTO* return*/public PageResult pageQuery(DishPageQueryDTO dishPageQueryDTO) {PageHelper.startPage(dishPageQueryDTO.getPage(), dishPageQueryDTO.getPageSize());PageDishVO page dishMapper.pageQuery(dishPageQueryDTO);//后绪步骤实现return new PageResult(page.getTotal(), page.getResult());} 3.2.6 Mapper层
在 DishMapper 接口中声明 pageQuery 方法 /*** 菜品分页查询** param dishPageQueryDTO* return*/PageDishVO pageQuery(DishPageQueryDTO dishPageQueryDTO);
在 DishMapper.xml 中编写SQL
select idpageQuery resultTypecom.sky.vo.DishVOselect d.* , c.name as categoryName from dish d left outer join category c on d.category_id c.idwhereif testname ! nulland d.name like concat(%,#{name},%)/ifif testcategoryId ! nulland d.category_id #{categoryId}/ifif teststatus ! nulland d.status #{status}/if/whereorder by d.create_time desc
/select
1. 因为left join category表即d表查全部c表查部分即c表有约束约束的方式是用on关键字进行约束
2.因为d.*里有name属性二者重合了所以要给c.name取个别名c.name as categoryName否则mybatis底层无法完成自动映射。
3. 小结 分页查询菜品功能
1.把前端返回的数据封装成了DTO2.把数据库查询返回的结果封装成了VO3.分页查询首先使用分页插件然后进行查全部因为涉及到了多表所以就用了了左外连接把查到的结果封装成page实体类最后封装PageResult返回!--查询所有菜品以及菜品所属分类 因为left join category表即d表查全部c表查部分所以c表有约束约束的方式是用on关键字进行约束--select idfindAll resultTypecom.sky.vo.DishVOselect d.*,c.name as categoryNamefrom dish d left join category c on d.category_id c.id。。。/select小细节因为d.*里有name属性二者重合了所以要给c.name取个别名c.name as categoryName否则mybatis底层无法完成自动映射。