蜗牛学苑 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 返回对象给到前端,简化项目异常处理代码。
相关推荐
xier_ran8 分钟前
【infra之路】AI 编译器学习笔记(十三):AI 编译器全景——TVM、XLA、IREE 与其他
人工智能·笔记·学习
连山齐名9 分钟前
ai应用开发的学习笔记
服务器·笔记·学习
奇牙coding19 分钟前
Codex CLI 升级后多文件编辑静默失效:config.yaml 枚举变更排查与修复指南
java·前端·javascript·ai
小羊没烦恼!26 分钟前
Ajax与JSON的一些总结
android·java·前端·数据库·mysql·算法·okhttp
Lhappy嘻嘻32 分钟前
读懂 JVM:内存模型、类加载机制、分代回收
java·开发语言·jvm
黄俊懿32 分钟前
【架构师从入门到进阶】第六章:服务集群优化——第八节:线程数公式
java·服务器·数据库·分布式·性能优化·架构·系统架构
Rain的Java大神之路39 分钟前
别再死磕 MySQL 了:向量数据库与 RAG 生产落地实录(Java 工程师专场)
java·后端·面试
七夜zippoe40 分钟前
Spring AI 是什么?Java 工程师的 AI 开发第一站
java·人工智能·spring·ai·开发
xier_ran40 分钟前
【infra之路】AI 编译器学习笔记(十四):为什么要 tiling,以及矩阵计算单元的“固定“
人工智能·笔记·学习
是真的小外套1 小时前
2023年软考中级信息安全工程师|选择题考点+5道案例分析真题解析(含答案)
java·服务器·网络