java 瑞吉外卖day4及补全功能 文件上传下载 菜品分页查询 Dto类 菜品状态修改 菜品停售以及菜品删除
文件上传下载
文件下载介绍
文件上传代码实现
服务端上传:
@RestController @RequestMapping("/common") @Slf4j public class CommonController {@Value("${reggie.path}")private String basePath;//从配置文件读取设置好的basePath@PostMapping("/upload")public R upload(MultipartFile file){//file是一个临时文件,需要转存到地址中,否则请求结束就会自动删除//原始文件名String originalFilename = file.getOriginalFilename();//截取文件类型的字符串.jpg/.jpeg等等String substring = originalFilename.substring(originalFilename.lastIndexOf("."));//使用UUID重新生成文件名 防止文件重名导致覆盖String fileName = UUID.randomUUID().toString() + substring;//创建文件路径,并检查文件夹是否存在File dir =new File(basePath);//如果不存在就新建文件夹if (!dir.exists()){dir.mkdirs();}try {//将文件转存到我们指定的文件夹里file.transferTo(new File(basePath+fileName));} catch (IOException e) {throw new RuntimeException(e);}//将fileName返回,后续还会用到return new R(1,fileName);} }
文件下载实现
@GetMapping("/download") public void download(String name, HttpServletResponse response){//输入流 读取文件内容try {FileInputStream fileInputStream =new FileInputStream(new File(basePath+name));//输出流,通过输出流将文件写会浏览器,在浏览器展示图片ServletOutputStream outputStream=response.getOutputStream();int len = 0;byte[] bytes=new byte[1024];while ((len=fileInputStream.read(bytes))!=-1){outputStream.write(bytes,0,len);outputStream.flush();}//关闭资源outputStream.close();fileInputStream.close();} catch (IOException e) {throw new RuntimeException(e);}}
新增菜品
准备工作:
梳理交互过程
下拉框数据:
//根据条件查询分类数据 @GetMapping("/list") public R list(Category category){LambdaQueryWrapper<Category> queryWrapper=new LambdaQueryWrapper<>();//添加条件queryWrapper.eq(category.getType()!=null,Category::getType,category.getType());//添加排序条件queryWrapper.orderByAsc(Category::getSort).orderByDesc(Category::getUpdateTime);List<Category> list = categoryService.list(queryWrapper);return new R(1,"查询成功",list); }
DishServletImpl:
Service public class DishServiceImpl extends ServiceImpl<DishMapper, Dish> implements DishService {@Autowiredprivate DishFlavorService dishFlavorService;/*** 新增菜品,同时保存对应的口味数据* @param dishDto*/@Override@Transactionalpublic void saveWithFlavor(DishDto dishDto) {//保存菜品的基本信息到菜品表dishthis.save(dishDto);Long dishId = dishDto.getId();//菜品Id//菜品口味List<DishFlavor> flavors =dishDto.getFlavors();//给集合中的每个菜品口味都附上菜品id值flavors=flavors.stream().map((item)->{item.setDishId(dishId);return item;}).collect(Collectors.toList());//保存菜品口味数据到菜品口味表dish_flavordishFlavorService.saveBatch(flavors);} }
DishController:
@RestController @RequestMapping("/dish") public class DishController {@Autowiredprivate DishService dishService;@Autowiredprivate DishFlavorService dishFlavorService;@PostMappingpublic R save(@RequestBody DishDto dishDto){dishService.saveWithFlavor(dishDto);return new R(1,"新增菜品成功");} }
菜品分页查询
DishController:
@GetMapping("/page") public R 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);//因为我们查询dish的集合中,只查到category的id,不包含category的categoryName//所以要用新建并装进DishDto集合中//对象拷贝 ,排除records数据,pageInfo的records也就是 dish集合BeanUtils.copyProperties(pageInfo,dishDtoPage,"records");List<Dish> records =pageInfo.getRecords();//把Dish集合的每一个dish都拷贝到新建的dishDto 然后封装数据返回dishDto的集合List<DishDto> list = records.stream().map((item) -> {DishDto dishDto = new DishDto();BeanUtils.copyProperties(item, dishDto);Long categoryId = item.getCategoryId();//根据Id查询category对象 然后获得nameCategory category = categoryService.getById(categoryId);//获取到name并封装进dishDtoString categoryName = category.getName();dishDto.setCategoryName(categoryName);return dishDto;}).toList();//设置封装的Page类的RecordsdishDtoPage.setRecords(list);return new R(1,"查询成功",dishDtoPage);}
修改菜品
DishServiceImpl:
@Override public void updateWithFlavor(DishDto dishDto) {log.info("dishDto:{}",dishDto);//更新dish表基本信息this.updateById(dishDto);//清理当前菜品对应口味数据---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();//给集合中的每个菜品口味都附上菜品id值flavors=flavors.stream().map((item)->{item.setDishId(dishDto.getId());return item;}).collect(Collectors.toList());dishFlavorService.saveBatch(flavors);}
DishController:
@PutMapping() public R update(@RequestBody DishDto dishDto){dishService.updateWithFlavor(dishDto);return new R(1,"新增菜品成功"); }
菜品状态修改以及菜品删除
菜品状态修改
菜品状态,在前端post
传了一个status,跟菜品的当前状态相反
还有一个ids,也就是菜品的id
批量修改跟单个修改发送的请求是一样的,所以我们直接写到同一个方法里
直接写DishController方法:
@PostMapping("/status/{status}") public R statusChange(@PathVariable int status, @RequestParam List<Long> ids) {log.info("status:{},ids:{}",status,ids);//我们封装一个dish集合用作多条更新的条件List<Dish> dishes =new ArrayList<>();//遍历每个id并携带status封装进dish类然后塞进集合for (Long id : ids) {Dish dish =new Dish();dish.setId(id);dish.setStatus(status);dishes.add(dish);}//直接调用方法dishService.updateBatchById(dishes);return new R(1,"状态修改成功");}
菜品删除
菜品删除前,我们需要把菜品对应的口味删除掉
前端只传过来一个 ids 用的Delete请求
批量删除请求跟单个删除一样,我们也成一个方法
我们在DishService层写一个deleteWithFlavor方法
@Override public void deleteWithFlavor(List<Long> ids) {//清除当前菜品对应口味数据LambdaQueryWrapper<DishFlavor> queryWrapper =new LambdaQueryWrapper<>();queryWrapper.in(DishFlavor::getDishId,ids);dishFlavorService.remove(queryWrapper);//删除当前菜品数据this.removeByIds(ids); }
然后再在controller调用就可以了
@DeleteMapping public R deleteById(@RequestParam List<Long> ids){log.info("ids:{}",ids);dishService.deleteWithFlavor(ids);return new R(1,"删除成功"); }
java 瑞吉外卖day4及补全功能 文件上传下载 菜品分页查询 Dto类 菜品状态修改 菜品停售以及菜品删除相关推荐
- SB_5_瑞吉外卖_4_文件上传下载_菜品新增_菜品分页查询_菜品修改
瑞吉外卖-Day04 课程内容 文件上传下载 菜品新增 菜品分页查询 菜品修改 1. 文件上传下载 1.1 上传介绍 1.1.1 概述 文件上传,也称为upload,是指将本地图片.视频.音频等文件上 ...
- 瑞吉外卖 04 CRUD 菜品 + 文件上传下载
文件上传下载 预准备 前端代码: 会动态生成一个图像元素. 代码实现 文件上传 在resource/backend/page下创建demo文件,将资料/文件上传下载页面中upload.html复制到这 ...
- java使用Jsch实现远程操作linux服务器进行文件上传、下载,删除和显示目录信息...
1.java使用Jsch实现远程操作linux服务器进行文件上传.下载,删除和显示目录信息. 参考链接:https://www.cnblogs.com/longyg/archive/2012/06/2 ...
- 文件上传 java web_JavaWeb 文件上传下载
1. 文件上传下载概述 1.1. 什么是文件上传下载 所谓文件上传下载就是将本地文件上传到服务器端,从服务器端下载文件到本地的过程.例如目前网站需要上传头像.上传下载图片或网盘等功能都是利用文件上传下 ...
- java实现excel文件上传_java相关:SpringMVC下实现Excel文件上传下载
java相关:SpringMVC下实现Excel文件上传下载 发布于 2020-6-21| 复制链接 摘记: 在实际应用中,经常会遇到上传Excel或者下载Excel的情况,比如导入数据.下载统计数据 ...
- java ftp 下载慢_Java实现ftp文件上传下载解决慢中文乱码多个文件下载等问题
废话不多说了,直接给大家贴代码了,具体代码如下所示: //文件上传 public static boolean uploadToFTP(String url,int port,String usern ...
- centos nfs java_CentOS下安装配置NFS并通过Java进行文件上传下载
1:安装NFS (1)安装 yum install nfs-utils rpcbind (2)启动rpcbind服务 systemctl restart rpcbind.service 查看服务状态 ...
- java上传文件到ftp_java实现文件上传下载至ftp服务器
以前做的一个项目,用到了文件上传下载至ftp服务器,现在对其进行一下复习,比较简单,一下就能看明白. 环境:首先,先安装ftp服务器,我是在win8本地用IIS配置的, 百度一下就可以找到安装文档. ...
- java批量上传文件_Spring Boot2(十四):单文件上传/下载,文件批量上传
文件上传和下载在项目中经常用到,这里主要学习SpringBoot完成单个文件上传/下载,批量文件上传的场景应用.结合mysql数据库.jpa数据层操作.thymeleaf页面模板. 一.准备 添加ma ...
最新文章
- secret-galaxy-300 Replace(印象深刻) 寒假逆向生涯(8/100)
- JAVA面试必备的知识宝典(一)
- 《实战突击.php项目开发案例整合》.(明日科技).[PDF]ckook
- 曼哈顿距离和欧拉距离
- kaggle使用笔记
- Optical-Flow光流halcon算子,持续更新
- Vertex and Fragment Shader
- 打了断点为直接运行完_BBC主持人多次打断,香港大律师忍不住发飙
- asp.net接受表单验证格式后再提交数据_看滴普科技大前端如何玩转el-form-renderer 表单渲染器1.14.0
- mysql中为啥只显示一条语句_MySQL 笔记整理(19) --为什么我只查一行的语句,也执行这么慢?...
- 4x4矩阵键盘c语言程序,C语言矩阵键盘程序
- JS动态添加Html
- Nokia于MWC再出手机9 PureView 6颗镜头受到瞩目
- 宏碁电脑怎么快速重装Win11系统?
- ELK系列之Mac安装kibana报错License information could not be obtained from Elasticsearch due to [invalid_inde
- lunix上silk转mp3 和 mp3转silk
- android多线程讲解与实例
- 进程间通信有哪几种方式?进程间通信的方法详解
- 一张学习规划图学透自动化测试
- 学嵌入式好还是java好?