蜗牛学苑 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 返回对象给到前端,简化项目异常处理代码。
相关推荐
苏渡苇1 小时前
Spring Insight 里上报 Span 为什么用 JDK HttpClient 而不是 RestTemplate
java·后端·spring·spring cloud·springboot·性能监控
裕晟资质规划1 小时前
军工保密资质二级申报的四个可量化硬条件:条文位置、数值口径与西安配套企业实务要点
java·服务器·网络·数据库·算法
初願致夕霞1 小时前
C/C++传统程序内存分布(代码实测)
java·c语言·c++
掉鱼的猫1 小时前
不只是 Token 流:Solon AI 4.1 的语义化聊天事件
java·openai
她的男孩1 小时前
同一个接口,为什么销售只看到自己的订单?我拆了 681 行数据权限拦截器的源码
java·后端·架构
卓怡学长2 小时前
w157基于springboot北部湾地区助农平台
java·spring boot·spring·maven·intellij-idea
小白羊丨2 小时前
问数 Agent 整体架构、意图识别、历史上下文与 NL2SQL
java·面试·架构
Linux-lucky2 小时前
33-Linux学习之旅之MySQL用户管理
java·linux·运维·学习·mysql·ubuntu
SimonKing2 小时前
将cURL 命令直接变成 Java 代码?用JQuick-Curl搞起来
java·后端·程序员