一、保存员工基本信息
二、保存员工工作经历信息
✅ 批量插入工作经历(MyBatis 动态 SQL)
使用 <foreach>
标签循环插入:
<insert id="insertExprList">
INSERT INTO emp_expr (emp_id, company, begin, end, job)
VALUES
<foreach collection="list" item="expr" separator=",">
(#{expr.empId}, #{expr.company}, #{expr.begin}, #{expr.end}, #{expr.job})
</foreach>
</insert>
✅ 插入后获取主键 ID
@Insert("INSERT INTO emp (...) VALUES (...)")
@Options(useGeneratedKeys = true, keyProperty = "id")
void insert(Emp emp);
三、Spring 事务管理
💡 场景问题
如果成功保存了 emp 表中的数据,却因异常没插入 emp_expr,会导致数据不一致。
👉 必须将两步操作放入一个事务中!
✅ 什么是事务(Transaction)?
- 一组操作,要么全部执行成功,要么全部失败
- 是数据库中保证数据一致性的机制
✅ 手动事务控制(了解)
START TRANSACTION;
-- 执行多条 SQL
COMMIT; -- 或 ROLLBACK;
✅ SpringBoot 中事务控制(重点)
使用注解 @Transactional
作用:将当前方法交给spring进行事务管理,方法执行前,开启事务;成功执行完毕,提交事务;出现异常,回滚事务
位置:业务(service)层的方法上、类上、接口上
@Service
public class EmpService {
@Transactional
public void saveEmp(Emp emp) {
empMapper.insert(emp);
empExprMapper.insertBatch(emp.getExprList());
}
}
✅ 异常回滚说明
- 默认:只回滚
RuntimeException
- 想回滚其他异常 → 设置 rollbackFor
@Transactional(rollbackFor = Exception.class)
✅ 事务传播行为(了解)
指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行事务控制(propagation)
行为 | 说明 |
---|---|
REQUIRED | 默认,加入当前事务 |
REQUIRES_NEW | 创建新事务,暂停旧事务 |
适用于:主方法 + 日志记录方法分别管理事务
四、文件上传
✅文件上传
将本地图片、视频、音频等文件上传到服务器,供其他用户浏览或下载的过程。
文件上传在项目中应用非常广泛,我们经常发微博、发微信朋友圈都用到了文件上传功能。
✅前端页面三要素
method="post" enctype="multipart/form-data input type="file"
<form action="/upload" method="post" enctype="multipart/form-data">
姓名: <input type="text" name="name"><br>
年龄: <input type="text" name="age"><br>
头像: <input type="file" name="file"><br>
<input type="submit" value="提交">
</form>
1、本地存储
✅ 步骤
// 获取原始文件名
String fileName = multipartFile.getOriginalFilename();
// 转存到服务器指定路径
multipartFile.transferTo(new File("D:/upload/" + fileName));
⚠️ 注意
-
文件大小限制默认 1MB
- 配置方式(application.yml):
spring:
servlet:
multipart:
max-file-size: 10MB
max-request-size: 50MB
⚠️缺点:无法公网访问、磁盘容量有限、不可靠
2、阿里云 OSS 上传(企业推荐)
✅ OSS 简介
OSS(Object Storage Service)是阿里云提供的对象存储服务,支持上传图片、音频、视频等文件,提供外链访问。
✅ 使用步骤
- 注册阿里云账号并实名认证
- 充值并开通 OSS 服务
- 创建 Bucket(存储空间)
- 获取 AccessKey(ID + Secret)
- 安装官方 SDK,使用 Java 上传
可以参考官方文档:OSS Java SDK快速入门
✅ 项目集成流程
① 添加 SDK 依赖
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.15.1</version>
</dependency>
② 编写上传工具类
public class AliOssUtils {
public String upload(MultipartFile file) {
// 连接 OSS,上传,返回文件外链 URL
}
}
③ 上传接口
@PostMapping("/upload")
public Result upload(MultipartFile file) {
String url = aliOssUtils.upload(file);
return Result.success(url);
}
3、参数配置优化方式
方法 | 特点说明 |
---|---|
@Value | 单个字段注入,适合少量配置 |
@ConfigurationProperties | 一次性绑定多个配置项到 Java Bean ✅ 推荐 |
✅ 示例
aliyun:
oss:
endpoint: xxx
accessKeyId: xxx
accessKeySecret: xxx
bucketName: xxx
@ConfigurationProperties(prefix = "aliyun.oss")
public class AliOssProperties {
private String endpoint;
private String accessKeyId;
...
}
✅ 总结表格
模块 | 核心内容 |
---|---|
新增员工 | 拆分 emp、emp_expr 表,批量插入,注意主键回填 |
事务控制 | 使用 @Transactional,保证多表数据一致性,支持异常控制 |
文件上传 | 本地上传入门,阿里云 OSS 企业应用推荐,掌握 SDK 使用流程 |
参数注入方式 | @Value 适用于少量,@ConfigurationProperties 适合批量注入 |