有关事务的总结

一、事务的基本概念
事务(Transaction) 是一组数据库操作,这些操作要么全部成功执行,要么全部失败回滚,具有 ACID 特性。

  • 事务特性--->ACID 特性:
    原子性(Atomicity):事务是一个不可分割的工作单位,里面的操作要么全部成功,要么全部失败
    一致性(Consistency):事务开始前到事务结束后,数据总量保持不变,即必须使数据库从一个一致状态变换到另一个一致状态。
    隔离性(Isolation):事务之间相互隔离,互不影响,多个事务并发执行时,一个事务的执行不应影响其他事务。
    持久性(Durability):事务一旦提交,其对数据库的修改就是永久性的。
    命令:begin开启事务 commit提交事务 rollback回滚事务
    二、Spring 中的事务管理
    Spring 提供了声明式事务管理和编程式事务管理两种方式。
  1. 声明式事务管理
    通过注解 @Transactional 实现,推荐使用。
点击查看代码
@Service
public class UserService {

    @Transactional
    public void transferMoney(User fromUser, User toUser, BigDecimal amount) {
        // 扣款
        fromUser.setBalance(fromUser.getBalance().subtract(amount));
        // 入账
        toUser.setBalance(toUser.getBalance().add(amount));
    }
}
注意:@Transactional 注解的方法必须是 public 的,并且只能在 Spring 管理的 Bean 上使用。
  1. 编程式事务管理
    通过 TransactionTemplate 或 PlatformTransactionManager 手动控制事务边界。
点击查看代码
@Autowired
private TransactionTemplate transactionTemplate;

public void doInTransaction() {
    transactionTemplate.execute(status -> {
        // 数据库操作
        return null;
    });
}

三、事务传播行为(Propagation)
事务传播行为定义了方法在调用过程中如何参与事务。

传播行为
描述
REQUIRED
如果当前存在事务,则加入;否则新建一个事务(默认)
REQUIRES_NEW
总是新建事务,并挂起当前事务(如果有的话)
SUPPORTS
支持当前事务,不存在则以非事务方式执行
NOT_SUPPORTED
不支持事务,总是以非事务方式执行
MANDATORY
必须存在事务,否则抛出异常
NEVER
不能存在事务,否则抛出异常
NESTED
在嵌套事务中执行
posted @ 2025-07-13 20:06  mz456  阅读(6)  评论(0)    收藏  举报