事务基础概念
什么是事务
事务是一组操作的集合,是一个不可分割的操作单元。它将所有操作视为一个整体,要么同时向数据库提交,要么同时撤销。这意味着这组操作要么全部成功,要么全部失败。
为什么要有事务
在程序开发中,业务逻辑往往涉及多个步骤,需要保证数据的一致性。
以转账为例:
- A 账户 -100 元。
- B 账户 +100 元。
如果没有事务保护,第一步执行成功后第二步失败,A 账户的 100 元就会凭空消失。引入事务后,这一组操作要么一起成功,要么一起失败,从而保证了资金安全。
事务的基本操作
事务的生命周期主要包含三个步骤:
- 开启事务:
start transaction/begin(在执行一组操作前开启) - 提交事务:
commit(当所有操作均成功时提交) - 回滚事务:
rollback(当中间任何一步出现异常时回滚)
Spring 事务实现方式
Spring 提供了两种事务管理策略:
- 编程式事务:手动编写代码控制事务的开始、提交和回滚。
- 声明式事务:基于注解或配置自动管理事务,推荐使用。
准备工作
为了演示效果,我们需要准备基础的数据表和访问代码。这里假设我们有两张表:log_info 和 user_info。

Spring 编程式事务
这种方式需要显式调用 TransactionStatus 对象来管理事务状态。
package com.hbu.springtransdemo.controller;
import com.hbu.springtransdemo.service.UserInfoService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
{
UserInfoService userInfoService;
DataSourceTransactionManager dataSourceTransactionManager;
TransactionDefinition transactionDefinition;
String {
dataSourceTransactionManager.getTransaction(transactionDefinition);
userInfoService.registryUser(name, password);
log.info();
dataSourceTransactionManager.commit(transactionStatus);
;
}
}


