菜品信息分页查询:

需求分析:

系统中的菜品数据很多的时候,如果在一个页面中全部展示出来会显得比较乱,不便于查看,所以一般的系统中都会以分页的方式来展示列表数据。
其中,图片列和菜品分类列比较特殊。图片列会用到文件下载功能;菜品分类列只保存了菜品的category_id,需通过查找category_id所对应的菜品分类名称,从而回显数据,才能在网页界面中显示。

交互流程:

1、页面(backend/page/food/list.html)发送ajax请求,将分页查询参数(page、pageSize、name)提交到服务端,获取分页数据

2、页面发送请求,请求服务端进行图片下载,用于页面图片展示

开发菜品信息分页查询功能,其实就是在服务端编写代码去处理前端页面发送的这2次请求即可。

图片下载的请求前面已经写好了,前端也写好了相关的请求,所以第二步的图片下载和展示就不需要另外开发了。

代码开发:(重点梳理熟悉代码流程)

DishController层代码:

/*** 菜品信息分页查询* @param page* @param pageSize* @param name* @return*/
@GetMapping("/page")
public R<Page> page(int page,int pageSize,String name){//构造一个分页构造器对象Page<Dish> dishPage = new Page<>(page,pageSize);//构造一个条件构造器LambdaQueryWrapper<Dish> queryWrapper = new LambdaQueryWrapper<>();//添加过滤条件 注意判断是否为空  使用对name的模糊查询queryWrapper.like(name != null,Dish::getName,name);//添加排序条件  根据更新时间降序排queryWrapper.orderByDesc(Dish::getUpdateTime);//去数据库处理分页 和 查询dishService.page(dishPage,queryWrapper);//因为上面处理的数据没有分类的id,这样直接返回R.success(dishPage)虽然不会报错,但是前端展示的时候这个菜品分类这一数据就为空return R.success(dishPage);
}

这段代码有bug,前端展示的时候,菜品分类这一栏的数据都为空

之前我们创建了DishDto类,发现类中的属性名正好和前端的categoryName属性名对应

修改DishController中的page方法

/*** 菜品信息分页查询* @param page* @param pageSize* @param name* @return*/
@GetMapping("/page")
public R<Page> page(int page,int pageSize,String name){//构造分页构造器对象Page<Dish> pageInfo = new Page<>(page,pageSize);Page<DishDto> dishDtoPage = new Page<>();//构造条件构造器LambdaQueryWrapper<Dish> queryWrapper = new LambdaQueryWrapper<>();//添加过滤条件queryWrapper.like(name != null,Dish::getName,name);//添加排序条件queryWrapper.orderByDesc(Dish::getUpdateTime);//执行分页查询dishService.page(pageInfo,queryWrapper);//对象拷贝(忽略掉records这个属性)BeanUtils.copyProperties(pageInfo,dishDtoPage,"records");List<Dish> records = pageInfo.getRecords();List<DishDto> list = records.stream().map((item) -> {DishDto dishDto = new DishDto();BeanUtils.copyProperties(item,dishDto);Long categoryId = item.getCategoryId();//分类id//根据id查询分类对象Category category = categoryService.getById(categoryId);if(category != null){String categoryName = category.getName();dishDto.setCategoryName(categoryName);}return dishDto;}).collect(Collectors.toList());dishDtoPage.setRecords(list);return R.success(dishDtoPage);
}

修改菜品:(先将数据回显到修改界面,后修改保存数据)

需求分析:

  • 在菜品管理列表页面点击修改按钮,跳转到修改菜品页面
  • 在修改页面回显菜品相关信息并进行修改
  • 最后点击确定按钮完成修改操作

交互流程:

  • 页面发送ajax请求,请求服务端获取分类数据,用于菜品分类下拉框中数据展示(已完成)
  • 页面发送ajax请求,请求服务端,根据id查询当前菜品信息,用于菜品信息回显
  • 页面发送请求,请求服务端进行图片下载,用于页图片回显(已完成)
  • 点击保存按钮,页面发送ajax请求,将修改后的菜品相关数据以json形式提交到服务端

代码开发:

在DishService接口中添加方法getByIdWithFlavor

 在DishServicelmpl中实现getByIdWithFlavor方法,并添加逻辑代码

/*** 根据id来查询菜品信息和对应的口味信息* @param id* @return*/
@Override
public DishDto getByIdWithFlavor(Long id) {//查询菜品基本信息,从dish表查询Dish dish = this.getById(id);DishDto dishDto = new DishDto();BeanUtils.copyProperties(dish,dishDto);//查询当前菜品对应的口味信息,从dish_flavor表查询LambdaQueryWrapper<DishFlavor> queryWrapper = new LambdaQueryWrapper<>();queryWrapper.eq(DishFlavor::getDishId,dish.getId());List<DishFlavor> flavors = dishFlavorService.list(queryWrapper);dishDto.setFlavors(flavors);return dishDto;
}
  • 根据服务端接收的id,查询菜品的基本信息-dish
  • 创建dishDto对象,并将查询到的dish对象属性赋值给dishDto
  • 根据查询到的dish对象,可以取出对应的菜品id,再通过等值条件查询,查询到DishFlavor数据信息
  • 将查询到的flavor数据信息使用set方法赋值给dishDto对象
  • 返回dishDto对象

在DishController中添加get方法,实现添加在DishServicelmpl中的逻辑代码,返回查询到的数据信息

/*** 根据id查询菜品信息和对应的口味信息* @param id* @return*/
@GetMapping("/{id}")
public R<DishDto> get(@PathVariable Long id){DishDto dishDto = dishService.getByIdWithFlavor(id);return R.success(dishDto);
}

在DishService接口中添加updateWithFlavor方法

DishServicelmpl类中实现DishService定义的方法,并添加代码逻辑

  • 根据id修改菜品的基本信息
  • 通过dish_id,删除菜品的flavor
  • 获取前端提交的flavor数据
  • 为条flavor的dishId属性赋值
  • 将数据批量保存到dish_flavor数据库
@Override
public void updateWithFlavor(DishDto dishDto) {//更新dish表基本信息this.updateById(dishDto);//更新dish_flavor表基本信息//1.清理当前菜品对应口味数据---dish_flavor表的delete操作LambdaQueryWrapper<DishFlavor> queryWrapper = new LambdaQueryWrapper<>();queryWrapper.eq(DishFlavor::getDishId, dishDto.getId());dishFlavorService.remove(queryWrapper);//添加当前提交过来的口味数据---dish_flavor表的insert操作List<DishFlavor> flavors = dishDto.getFlavors();flavors = flavors.stream().map((item) ->{item.setDishId(dishDto.getId());return item;}).collect(Collectors.toList());dishFlavorService.saveBatch(flavors);
}

在DishController类中添加方法update,并调用updateWithFlavor方法实现表中数据的修改

/*** 修改菜品* @param dishDto* @return*/
@PutMapping
public R<String> update(@RequestBody DishDto dishDto){log.info(dishDto.toString());dishService.updateWithFlavor(dishDto);return R.success("修改菜品成功");
}

停售起售菜品以及修改菜品:

/*** 停售/起售菜品* @param status* @param ids* @return*/@PostMapping("/status/{status}")public R<String> sale(@PathVariable int status,String[] ids){for(String id: ids){Dish dish = dishService.getById(id);dish.setStatus(status);dishService.updateById(dish);}return R.success("修改成功");}/*** 删除菜品* @param ids* @return*/@DeleteMappingpublic R<String> delete(String[] ids){for (String id:ids) {dishService.removeById(id);}return R.success("删除成功");}

【瑞吉外卖】学习笔记-day4:(三)菜品管理开发——菜品信息分页查询、修改菜品、停售起售菜品以及删除菜品相关推荐

  1. 瑞吉外卖项目笔记+踩坑1——基础功能

     导航: [黑马Java笔记+踩坑汇总]JavaSE+JavaWeb+SSM+SpringBoot+瑞吉外卖+SpringCloud/SpringCloudAlibaba+黑马旅游+谷粒商城 目录 1 ...

  2. 【瑞吉外卖开发笔记】

    瑞吉外卖开发笔记 源码地址 一.业务开发Day01 1.软件开发整体介绍 软件开发流程 角色分工 软件环境 2.瑞奇外卖项目介绍 项目介绍 产品原型展示 技术选型 功能架构 角色 3.环境搭建 开发环 ...

  3. 瑞吉外卖day01笔记

    一. 软件开发整体介绍 作为一名软件开发工程师,我们需要了解在软件开发过程中的开发流程, 以及软件开发过程中涉及到的岗位角色,角色的分工.职责, 并了解软件开发中涉及到的三种软件环境.那么这一小节,我 ...

  4. java 瑞吉外卖 day5 套餐管理业务 套餐新增,套餐分页查询 套餐修改 套餐停售起售设置 短信服务

    新增套餐 准备工作: 套餐信息分页查询 前面已经写了好几个分页查询了,这里查询的关键点,是套餐分类名称,不在套餐表中,我们要到别的表里拿,然后封装进setmealDto @GetMapping(&qu ...

  5. 自定义报错返回_MybatisPlus基础篇学习笔记(五)------自定义sql及分页查询

    本章目录 自定义sql 分页查询 1. 自定义sql 在dao文件中编写自定义接口,并在方法上使用注解形式注入SQL,如图所示: 第一种: 第二种 ① application.yml加入下面配置 my ...

  6. ElasticSearch学习笔记(三):CRUD之简单查询

    city-event-processing--索引名 一.数据体 索引结构 PUT city-event-processing {"settings": {"number ...

  7. 瑞吉外卖【后台管理系统篇】

    瑞吉外卖 一.软件开发整体介绍 1.软件开发流程 2.角色分工 3.软件环境 二.瑞吉外卖项目介绍 1.项目介绍 2.技术选型 3.功能架构 三.开发环境搭建 1.数据库环境搭建 2.maven项目搭 ...

  8. Java实战项目《瑞吉外卖》

    目录 <瑞吉外卖>后台管理系统开发 软件开发整体介绍 1.软件开发流程 2.角色分工 3.软件环境 瑞吉外卖项目介绍 1.项目介绍 2.产品原型展示 3.技术选型 4.功能架构 5.角色 ...

  9. 瑞吉外卖项目——瑞吉外卖

    软件开发整体介绍 软件开发流程 需求分析:产品原型.需求规格说明书 设计:产品文档.UI界面设计.概要设计.详细设计.数据库设计 编码:项目代码.单元测试 测试:测试用例.测试报告 上线运维:软件环境 ...

  10. 黑马瑞吉外卖之移动端验证码登录使用qq邮箱

    黑马瑞吉外卖之移动端验证码登录 说明 用qq邮箱进行验证码发送 hi,我是兰舟千帆,本次更文还是将瑞吉外卖的笔记完善一下.每一篇都写得很认真哦,希望需要的人可以得到帮助,谢谢你们的阅读. 说明 pc端 ...

最新文章

  1. RabbitMQ(八):SpringBoot 整合 RabbitMQ(三种消息确认机制以及消费端限流)
  2. ABAP术语-Object Name
  3. IBM 公开最新 Power 处理器架构
  4. 论文笔记_S2D.25_2007-ACM-ISMAR-小型AR环境的并行跟踪和建图
  5. docker alpine中 配置 nginx和php两个容器互联时,访问php文件不执行问题
  6. JSP EL表达式中11个隐藏对象file:///D:/SoftwareFile/qq file/MobileFile/34090016310074682(1).png
  7. 注册ActiveX控件时DllRegisterServer调用失败的解决方法
  8. 保留地址就是私有地址吗?
  9. EyouCMS瀑布流分页详细教程
  10. JAVA图片与字节流的相互转换
  11. 贝叶斯法则与先验概率,后验概率
  12. PLC抑制干扰电路的设计
  13. mcnp的重复探测器单元计数-fmesh卡的介绍
  14. HNUCM-XP的点滴(水题)
  15. ERP系统开发需要多少钱?
  16. 人生六十才开始(转载)
  17. http://www.cnblogs.com/bluestorm/archive/2012/03/02/2377615.html
  18. 操作系统面经总结—虚拟内存、内存分页、内存交换与覆盖等
  19. 校园随手拍之Android从相册选取图片或拍摄图片并上传(kotlin版)
  20. Python:摘苹果

热门文章

  1. PHP 开发 APP 接口 学习笔记与总结 - 静态缓存
  2. 量化投资实战(一)之KDJ交易策略
  3. c语言跑酷游戏,C++用easyx图形库实现障碍跑酷小游戏
  4. 2019多校第九场 HDU6681 Rikka with Cake(欧拉图论定理,线段树)
  5. 中学教学能用上python吗_AI双师教学、用Python绘图 未来的中小学可能这样上课
  6. Linux-GNU make
  7. 优化问题-LP,QP和QCQP(线性规划,Linear Programming; 二次规划,Quadratic Programming;二次约束二次规划)
  8. linux安装elasticsearch服务
  9. 【MySQL】内容汇总
  10. 免疫学课件软件测试,免疫学实验2-----免疫荧光技术.ppt