蜗牛学苑 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 返回对象给到前端,简化项目异常处理代码。
相关推荐
从琳开始9895 分钟前
[JavaEE]多线程初阶(下篇)------多线程案例(单例模式,阻塞队列,线程池,定时器)
java·单例模式·java-ee
乌暮10 分钟前
# Spring 入门与 Spring MVC 实战指南:从零理解 IoC 到 RESTful 图书管理
java·开发语言·后端·学习·spring·mvc·restful
java1234_小锋11 分钟前
Spring Boot 4.0 官宣:弃用 Undertow
java·spring boot·后端
jyOverQ14 分钟前
Redis 主从复制、Sentinel 和 Cluster 到底有什么区别?
java·redis·sentinel
青春逝如流水26 分钟前
Java 线程在内存模型(JMM)与 JVM 实现:规范与落地的多元路径
java·开发语言·jvm·多线程·ai文章
小弥儿28 分钟前
PPT Master:用 AI 把PDF/Word一键转成可编辑 PPT
学习·开源·github
wangbing11252 小时前
springboot应用关闭时触发动作
java·spring boot·后端
weixin_460443565 小时前
2026年新修订《网络安全法》实施:Java私有化考试系统如何做好SBOM、漏洞治理与安全升级?
java·开发语言·在线考试系统·企业培训考试系统·宏远培训考试系统·国企培训考试系统·国产化培训系统
海鸥-w8 小时前
什么是AOP
java
Cc.Y8 小时前
Java零基础入门:可变字符串与包装类:StringBuilder、StringBuffer 与 通讯录管理系统实战
java·开发语言·python