一、思维导图整体知识结构梳理
新增员工
- 功能步骤
- 保存员工基础信息
- 批量保存员工工作经历
- 三层实现
- Controller:save 接口
- Service:save 业务方法
- Mapper:insert、insertBatch 批量插入
- 问题:两次 DML,部分成功造成数据不一致
Spring 事务 @Transactional
- 作用:方法前开启事务,成功提交,异常回滚
- 使用位置
- 方法:仅当前方法
- 类:类中全部方法
- 接口:实现类全部方法
- 属性 rollbackFor
- 默认:仅 RuntimeException 运行时异常回滚
- rollbackFor=Exception.class:所有异常都回滚
- 属性 propagation 传播行为
- REQUIRED【默认】:有事务就加入,共用同一个事务
- REQUIRES_NEW:新建独立事务,不受外部事务回滚影响
- 案例:操作日志,业务失败日志也要保存
- 事务四大特性 ACID
- 原子性:不可分割,全部成功 / 全部失败
- 一致性:事务前后数据状态合法
- 隔离性:多个事务之间互相隔离
- 持久性:提交后数据永久生效
- 调试:yml 开启事务 debug 日志
文件上传
- 表单三要素
- file 文件域
- POST 请求
- enctype="multipart/form‑data"
- Spring API:MultipartFile
- 存储方案
- 本地存储:磁盘损坏、容量有限、缺点多
- 云存储:阿里云 OSS
- 阿里云 OSS
- Bucket 存储空间
- AK/SK 密钥
- 依赖引入
- @ConfigurationProperties 读取配置,禁止硬编码
- 上传:返回图片 url,数据库保存 url 字符串
- Controller:UploadController
全局异常处理
- 原始问题:异常直接抛出,返回结果不统一
- 方案对比
- 全部 Controller try‑catch:代码臃肿,不推荐
- 全局异常处理器:优雅推荐
- 核心注解
- @RestControllerAdvice:全局异常处理类
- @ExceptionHandler:捕获指定异常类型
- 效果:统一返回 Result 格式给前端
二、制作意图
- 围绕 HRM 项目实战,梳理新增员工业务、Spring 事务、阿里云 OSS 文件上传、全局异常处理整套业务技术链路
- 厘清
@Transactional的使用坑点:回滚规则、传播行为、ACID 特性,面试高频考点 - 掌握文件上传表单规范、MultipartFileAPI,阿里云 OSS 集成最佳实践,数据库只存图片 URL
- 使用全局异常处理器统一项目返回格式,消除到处编写 try‑catch 的冗余代码
三、当日学习总结
Day36 学习 HRM 项目 4 模块:
- 新增员工业务存在两次 DML 操作,会出现部分成功、数据错乱问题,使用
@Transactional注解解决事务一致性;掌握事务使用位置、rollbackFor 回滚配置、propagation 传播行为以及 ACID 四大特性。 - 学习文件上传表单三要素,对比本地存储的弊端,集成阿里云 OSS 云存储;通过
@ConfigurationProperties读取配置,避免密钥硬编码,上传图片后数据库仅保存访问 URL。 - 采用
@RestControllerAdvice + @ExceptionHandler实现全局异常处理器,捕获项目异常,统一封装 Result 返回对象给到前端,简化项目异常处理代码。 