因为太久太久没有碰项目了(上一次还是2021年8月开发个人博客的时候),所以这一次打算从头到尾把整个学习和搭建的过程记录下来。
这是一个基于SpringBoot和Mybatis的企业级文件上传下载的实战项目,没有太多前端和UI的东西。
【编程不良人】基于SpringBoot和Mybatis企业级文件上传下载项目实战
根据需求,可以简单把库表设计成: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/
下面
因为不用华丽的前端,所以只需要创建一个简单的Springboot项目即可。
SpringBoot
版本,视频教程比较老,里面用的版本是2.2.5
,现在用的是2.6.3
MySQL
版本一般用5.x
版本,这里改成5.1.47
,同时还可以把runtime
去掉,scope区别Lombok
版本用1.8.20
,同时去掉true
spring-boot-starter-test
,关于测试也可以去掉(不知道为什么)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
的依赖
数据库username
和password
换成自己的
url
里的数据库名称使用之前创建的
需要创建dao
,entity
,mapper
包
此时运行项目,若能正常启动,说明环境没有问题
在main所在类上面添加@MapperScan("com.zzw.dao")
,为了之后扫描dao所在的包
这个项目主要是学习文件上传和下载,所以不在前端和UI花费太多时间,一切从简。
以下的三层简单开发,代码块中实现了文件查询
和文件上传
功能。为避免重复粘贴,文件下载
,在线打开
和文件删除
功能的代码不在这一章节贴出来。
@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)开启链式开发
@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;
}
注意DAO都是interface
,并且要记得添加@Mapper
@Mapper
public interface UserDAO {
User login(User user);
}
public interface UserFileDAO {
// 根据用户的ID获取用户的文件列表
List<UserFile> findByUserId(Integer id);
// 存储图片信息
void save(UserFile userFile);
}
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