基于Springboot和Mybatis的文件上传与下载

0. 前言

因为太久太久没有碰项目了(上一次还是2021年8月开发个人博客的时候),所以这一次打算从头到尾把整个学习和搭建的过程记录下来。

1. 简介

这是一个基于SpringBootMybatis的企业级文件上传下载的实战项目,没有太多前端和UI的东西。

2. 链接

【编程不良人】基于SpringBoot和Mybatis企业级文件上传下载项目实战

1. 设计

1. 需求

  1. 用户登陆,展示用户的所有文件(文件如果是图片则在页面中显示图片)
  2. 完成文件的下载在线打开(在线打开不计入下载次数)
  3. 在一张页面中完成文件的上传功能,上传的目录要根据日期,每天创建一个文件夹(文件夹统一命名格式:“yyyy-MM-dd”),上传文成后要跳转到查询所有页面

2. 页面图

基于Springboot和Mybatis的文件上传与下载_第1张图片

3. 库表设计

根据需求,可以简单把库表设计成:1. 用户表(用户信息:ID,用户名,密码);2. 文件表(文件信息:用户ID,文件名…)

DROP TABLE IF EXISTS `t_files`;
CREATE TABLE `t_files` (
  `id` int(8) NOT NULL,
  `oldFileName` varchar(200) DEFAULT NULL,
  `newFileName` varchar(300) DEFAULT NULL,
  `ext` varchar(20) DEFAULT NULL,
  `path` varchar(300) DEFAULT NULL,
  `size` varchar(200) DEFAULT NULL,
  `type` varchar(120) DEFAULT NULL,
  `isImg` varchar(8) DEFAULT NULL,
  `downcounts` int(6) DEFAULT NULL,
  `uploadTime` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `userId_idx` (`userId`),
  CONSTRAINT `userId` FOREIGN KEY (`userId`) REFERENCES `t_user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
  `id` int(8) NOT NULL,
  `username` varchar(80) DEFAULT NULL,
  `password` varchar(80) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

为后续方便,可以把db.sql放到resources/下面

2. 项目创建

因为不用华丽的前端,所以只需要创建一个简单的Springboot项目即可。

1. 依赖

在创建项目的时候导入基本依赖:
基于Springboot和Mybatis的文件上传与下载_第2张图片

2. 没用文件

  • 把用不到的文件删掉
    基于Springboot和Mybatis的文件上传与下载_第3张图片

  • 本项目为了快捷演示,没有作任何测试,下面把spring-boot-starter-test依赖删掉了,所以可以把/test/java下的文件都删掉

3. pom.xml(版本

  • SpringBoot版本,视频教程比较老,里面用的版本是2.2.5,现在用的是2.6.3
  • MySQL版本一般用5.x版本,这里改成5.1.47,同时还可以把runtime去掉,scope区别
  • Lombok版本用1.8.20,同时去掉true
  • spring-boot-starter-test,关于测试也可以去掉(不知道为什么)

3. 配置

application.properties

# 应用名在微服务架构中至关重要
spring.application.name=files
server.port=8989
server.servlet.context-path=/files

spring.thymeleaf.cache=false
spring.thymeleaf.suffix=.html
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.prefix=classpath:/templates/
spring.web.resources.static-locations=classpath:/templates/,classpath:/static/

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/files?characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=password

mybatis.mapper-locations=classpath:/com/zzw/mapper/*.xml
mybatis.type-aliases-package=com.zzw.entity

# 日志
logging.level.root=info
logging.level.com.zzw.dao=debug
  • 记得添加一下数据库连接池druid的依赖

  • 数据库usernamepassword换成自己的

  • url里的数据库名称使用之前创建的

  • 需要创建dao,entity,mapper

  • 此时运行项目,若能正常启动,说明环境没有问题

  • 在main所在类上面添加@MapperScan("com.zzw.dao"),为了之后扫描dao所在的包

4. 三层简单开发

这个项目主要是学习文件上传和下载,所以不在前端和UI花费太多时间,一切从简。

以下的三层简单开发,代码块中实现了文件查询文件上传功能。为避免重复粘贴,文件下载在线打开文件删除功能的代码不在这一章节贴出来。

1. Entity

1. User

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Accessors(chain = true)
public class User {
   
    private Integer id;
    private String username;
    private String password;
}

注意@Accessors(chain = true)这个注解可以实现set的链式编程:
Lombok插件@Accessors(chain = true)开启链式开发

2. UserFile

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Accessors(chain = true)
public class UserFile {
   
    private Integer id;
    private String oldFileName;
    private String newFileName;
    private String ext;
    private String path;
    private String size;
    private String type;
    private String isImg;
    private Integer downcounts;
    private Date uploadTime;
    private Integer userId;
}

2. DAO

注意DAO都是interface,并且要记得添加@Mapper

1. UserDAO

@Mapper
public interface UserDAO {
   
    User login(User user);
}

2. UserFileDAO

public interface UserFileDAO {
   
    // 根据用户的ID获取用户的文件列表
    List<UserFile> findByUserId(Integer id);
  
  	// 存储图片信息
    void save(UserFile userFile);
}

3. Mapper

1. UserDAOMapper


DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zzw.dao.UserDAO">

    
    <select id="login" parameterType="User" resultType="User

你可能感兴趣的:(SpringBoot,MyBatis,项目,spring,boot,java,后端,文件,上传下载)