SpringBoot 增删改查+文件上传

打印 上一主题 下一主题

主题 882|帖子 882|积分 2646

注:本文所用到的版本
  1. MySql 8.0.28
  2. SpringBoot 2.7.2
复制代码
准备工作 :建表  、pom.xml导入依赖 、application.yml 配置


  • 建表
  1. CREATE TABLE `rna` (
  2.   `id` int NOT NULL AUTO_INCREMENT,
  3.   `name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  4.   `card_img` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  5.   `card` varchar(18) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  6.   `sex` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  7.   `phone` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  8.   `check` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  9.   `check_date` datetime DEFAULT NULL,
  10.   `result` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  11.   PRIMARY KEY (`id`)
  12. ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
复制代码

  • pom.xml导入依赖
  1. <dependency>
  2.     <groupId>org.springframework.boot</groupId>
  3.     <artifactId>spring-boot-starter-web</artifactId>
  4. </dependency>
  5. <dependency>
  6.     <groupId>org.projectlombok</groupId>
  7.     <artifactId>lombok</artifactId>
  8.     <optional>true</optional>
  9. </dependency>
  10. <dependency>
  11.     <groupId>org.springframework.boot</groupId>
  12.     <artifactId>spring-boot-starter-test</artifactId>
  13.     <scope>test</scope>
  14. </dependency>
  15. <dependency>
  16.     <groupId>mysql</groupId>
  17.     <artifactId>mysql-connector-java</artifactId>
  18. </dependency>
  19. <dependency>
  20.     <groupId>com.alibaba</groupId>
  21.     <artifactId>druid</artifactId>
  22.     <version>1.2.11</version>
  23. </dependency>
  24. <dependency>
  25.     <groupId>org.mybatis.spring.boot</groupId>
  26.     <artifactId>mybatis-spring-boot-starter</artifactId>
  27.     <version>2.2.2</version>
  28. </dependency>
  29. <dependency>
  30.     <groupId>com.github.pagehelper</groupId>
  31.     <artifactId>pagehelper-spring-boot-starter</artifactId>
  32.     <version>1.4.2</version>
  33. </dependency>
  34. <dependency>
  35.     <groupId>commons-fileupload</groupId>
  36.     <artifactId>commons-fileupload</artifactId>
  37.     <version>1.4</version>
  38. </dependency>
复制代码

  • application.yml 配置
  1. server:
  2.   port: 8100
  3. spring:
  4.   datasource:
  5.     url: jdbc:mysql://localhost:3306/db03
  6.     username: 你的用户名
  7.     password: 你的密码
  8.     driver-class-name: com.mysql.cj.jdbc.Driver
  9.     type: com.alibaba.druid.pool.DruidDataSource
  10. mybatis:
  11.   mapper-locations: mapper/*.xml
  12.   type-aliases-package: com.lyt.work0721.entity
复制代码
目录结构

上传文件工具类
  1. package com.lyt.util;
  2. import org.springframework.util.ObjectUtils;
  3. import org.springframework.web.multipart.MultipartFile;
  4. import java.io.File;
  5. import java.io.IOException;
  6. import java.text.SimpleDateFormat;
  7. import java.util.Date;
  8. import java.util.UUID;
  9. /**
  10. * @author liuyutao
  11. * @date 2022/07/27
  12. */
  13. public class UploadUtil {
  14.     //上传文件的路径前缀
  15.     public static String uploadPathPrefix = "D:\\upload\\images\";
  16.     public static String upload(MultipartFile uploadFile, String oldPath) {
  17.         String uploadFullPath;//上传文件的完整路径
  18.         String saveSqlPartFilePath;//返回该属性,保存到数据库部分文件路径
  19.         if (ObjectUtils.isEmpty(oldPath)) {
  20.             String originalFilename = uploadFile.getOriginalFilename();//上传文件原始文件名
  21.             assert originalFilename != null;
  22.             String fileType = originalFilename.substring(originalFilename.lastIndexOf("."));//文件类型
  23.             Date date = new Date();
  24.             SimpleDateFormat sdf = new SimpleDateFormat("yyyy\\M\");
  25.             String format = sdf.format(date);
  26.             String uuid = UUID.randomUUID().toString().replace("-", "");
  27.             String saveDiskFileName = uuid + fileType;// 保存到磁盘的文件名
  28.             saveSqlPartFilePath = format + saveDiskFileName;
  29.             uploadFullPath = uploadPathPrefix + format + saveDiskFileName;//上传文件的完整路径:  D:\\upload\\images\\ yyyy\\M\\  uuid文件名
  30.         } else {
  31.             uploadFullPath = uploadPathPrefix + oldPath;
  32.             saveSqlPartFilePath = oldPath;
  33.         }
  34.         File file = new File(uploadFullPath);
  35.         try {
  36.             if (!file.exists()) {
  37.                 file.mkdirs();
  38.             }
  39.             uploadFile.transferTo(file);
  40.         } catch (IOException e) {
  41.             throw new RuntimeException(e);
  42.         }
  43.         return saveSqlPartFilePath;
  44.     }
  45. }
复制代码
SpringBoot 虚拟路径映射
  1. @Configuration
  2. public class WebMvcConfig implements WebMvcConfigurer {
  3.     @Override
  4.     public void addResourceHandlers(ResourceHandlerRegistry registry) {                   registry.addResourceHandler("/upload/**").addResourceLocations("file:D:/upload/images/");
  5.     }
  6. }
复制代码
新增  +  上传文件
  1. @PostMapping("/addRna")
  2. public int uploadCard(@RequestParam("file") MultipartFile file, @RequestPart Rna rna) {
  3.     String cardImg = UploadUtil.upload(file, null);
  4.     rna.setCardImg(cardImg);
  5.     return rnaService.insertSelective(rna);
  6. }
复制代码
思路:

  • 文件  和 对象数据 同时访问一个接口
  • 上传文件后返回文件的部分路径,非全路径
  • 设置到rna对象,一同添加到数据库
编辑 + 上传文件
  1. @PostMapping("/updateRna")
  2. public int updateRna(@RequestParam("file") MultipartFile file, @RequestPart Rna rna) {
  3.      if (!file.isEmpty()) {
  4.      Rna rnaById = rnaService.selectByPrimaryKey(rna.getId());
  5.      UploadUtil.upload(file, rnaById.getCardImg());
  6.      }
  7.      return rnaService.updateByPrimaryKeySelective(rna);
  8. }
复制代码

  • 这里不是删除原来文件,而是同路径同文件名,覆盖原文件
  • 有上传新文件,则覆盖原文件,编辑其他字段数据
  • 没有上传文件,编辑其他字段数据
查询


  • PageHelper 插件分页
  • 拼接文件的完整url访问路径
删除


  • 删除数据库数据 + 删除文件

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

河曲智叟

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表