当前位置: 首页 > ai >正文

@Transactional注解的使用

目录

一.介绍

1.使用@Transactional注解的位置

2.@Transactional注解的作用

二.举例

1.需求场景

2.做法

3.效果展示

三.简单总结


一.介绍

1.使用@Transactional注解的位置

        我们在Java开发中,一般在service层的方法上,使用@Transactional注解,表示方法内的所有子操作是一个整体,要么全部成功,要么全部失败。

2.@Transactional注解的作用

  @Transactional 是 Spring 框架 提供的核心事务管理注解,用于 声明式事务(Declarative Transaction Management),其核心作用是 确保数据库操作的 ACID 特性(原子性、一致性、隔离性、持久性),并在异常发生时自动回滚事务

二.举例

1.需求场景

        在医院HIS系统中,当门诊医生想要“毕诊”一个患者时,就需要在后端①修改该患者的病历状态 ②修改该患者的挂号状态。

        此时我们就必须要保证这两步操作同时成功。

        如果不同时成功,则就出现了数据不一致的问题,即:该患者的病历都被毕诊了,但是挂号状态还是看诊中。这显然是不合理的。

2.做法

//毕诊某个患者(修改患者病历状态 + 修改患者挂号状态)
@Transactional(rollbackFor = Exception.class) //出现任何异常,直接回滚,这样防止了数据不一致风险
public void finishMedical(Integer medicalId, Integer registerId) {try{//修改病历状态为state=3(诊毕)medicalRecordMapper.updateMedicalRecordState(medicalId, 3);//修改挂号状态为visitState=3(看诊结束)registerMapper.updateRegisterVisitState(registerId, 3);}catch(Exception e){throw new RuntimeException("毕诊操作失败,请稍后重试~");}
}

解读:

①一但try中的两个mapper层的方法中,有任何一个出现了异常,则该方法直接回滚,令所有操作都失效。这样就防止了数据不一致的情况。

②出现异常时,抛出运行时异常RuntimeException异常,并描述异常信息,然后就会被我们之前配置的全局异常处理器捕获,返回给前端错误信息。

3.效果展示

①成功状态下:

②失败状态下:

可见此时数据库中,该患者对应的病历表、挂号表的状态字段,没有发生变化,说明了毕诊方法确实被回滚了。

 

三.简单总结

        添加了@Transactional注解的方法,表示该方法中涉及的所有操作,视为一个整体。要么全部执行成功,要么全部执行失败,这样可以避免数据不一致问题。

http://www.xdnf.cn/news/4497.html

相关文章:

  • LangChain第三讲:大模型的输出如何格式化成字符串?
  • DIFY教程第五弹:科研论文翻译与SEO翻译应用
  • 简单的基于关键词匹配的 QA 系统示例
  • ICode国际青少年编程竞赛—Python—4级训练场—复杂嵌套循环
  • 多线程的出现解决了什么问题?深入解析多线程的核心价值
  • 力扣——25 K个一组翻转链表
  • 写个远程操作Android的调试程序
  • 【Linux篇】多线程编程中的互斥与同步:深入理解锁与条件变量的应用
  • Nginx 性能调优与深度监控
  • 7. HTML 表格基础
  • 第三章、RL Games:High performance RL library
  • femap许可回收流程
  • mysql修改root密码
  • 东方泵业,室外消火栓泵 2#故障灯亮,报警生响
  • 蓝桥杯2025年第十六届省赛真题-水质检测
  • 【shardingsphere分布式主键无效】
  • Linux 系统命令使用指南1
  • 2025最新出版 Microsoft Project由入门到精通(二)
  • WPF 触发器 Trigger
  • java每日精进 5.07【框架之数据权限】
  • 【C++游戏引擎开发】第33篇:物理引擎(Bullet)—射线检测
  • 小数的二进制表示
  • 【卡特兰数】不同的二叉搜索树
  • 学习笔记:黑马程序员JavaWeb开发教程(2025.3.30)
  • (25.05)Ubuntu 20.04上安装和运行ORB-SLAM3(非ROS)
  • 操作指南*
  • 数通HCIE的通过率怎么样?
  • no main manifest attribute, in xxx.jar
  • 软件系统的可观测性 Observability
  • 【AI】模型与权重的基本概念