蜗牛学苑 Java 智能体学习 Day36|阿里云 OSS 文件上传、Spring 事务、全局异常思维导图复盘

一、思维导图整体知识结构梳理

新增员工

  • 功能步骤
    • 保存员工基础信息
    • 批量保存员工工作经历
  • 三层实现
    • 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 格式给前端

二、制作意图

  1. 围绕 HRM 项目实战,梳理新增员工业务、Spring 事务、阿里云 OSS 文件上传、全局异常处理整套业务技术链路
  2. 厘清@Transactional的使用坑点:回滚规则、传播行为、ACID 特性,面试高频考点
  3. 掌握文件上传表单规范、MultipartFileAPI,阿里云 OSS 集成最佳实践,数据库只存图片 URL
  4. 使用全局异常处理器统一项目返回格式,消除到处编写 try‑catch 的冗余代码

三、当日学习总结

Day36 学习 HRM 项目 4 模块:

  1. 新增员工业务存在两次 DML 操作,会出现部分成功、数据错乱问题,使用@Transactional注解解决事务一致性;掌握事务使用位置、rollbackFor 回滚配置、propagation 传播行为以及 ACID 四大特性。
  2. 学习文件上传表单三要素,对比本地存储的弊端,集成阿里云 OSS 云存储;通过@ConfigurationProperties读取配置,避免密钥硬编码,上传图片后数据库仅保存访问 URL。
  3. 采用@RestControllerAdvice + @ExceptionHandler实现全局异常处理器,捕获项目异常,统一封装 Result 返回对象给到前端,简化项目异常处理代码。
相关推荐
机核研创社几秒前
polo 长袖短裤套装自动化产线:八台机器排队接力
android·java·自动化
小范的技术工坊1 分钟前
大模型学习操作文档(13个核心概念串讲)
人工智能·学习·算法·大模型
索端阳3 分钟前
I.MX6ULL 裸机开发:LCD Framebuffer 与 RGB888 学习笔记
笔记·vscode·嵌入式硬件·学习
Roadinforest12 分钟前
Spring Boot 4 六步入门实录:从 Hello World 到一个能交付的 Todo API
java·开发语言·spring boot·spring
半仙白桑13 分钟前
内核篇第十三讲:system-V消息队列
java·linux·网络
今天的砖头有点烫手啊18 分钟前
GC 算法与垃圾收集器演进:从 Serial 到 ZGC
java·jvm
牧瀬クリスだ31 分钟前
Mybatis-Plus:让CRUD快如闪电
java·spring boot·spring·tomcat·mybatis·yml
盐焗鹌鹑蛋39 分钟前
【Linux】线程概念和控制
java·linux·服务器
CarIise1 小时前
MyBatis缓存与分页插件:从一级二级缓存到底层原理与PageHelper实战
java·开发语言·spring
Orange_sparkle1 小时前
langgraph快速入门
学习·ai·typescript·deepseek·claude code