事务基础概念
什么是事务
事务是一组操作的集合,是一个不可分割的整体。它会将所有操作作为一个单元,要么一起向数据库提交,要么一起撤销。这组操作要么同时成功,要么同时失败。
为什么要有事务
开发中常遇到需要原子性的场景,比如转账:
- A 账户 -100 元。
- B 账户 +100 元。
如果没有事务,第一步成功了但第二步失败了,A 的 100 元就凭空消失了。引入事务后,这一组操作要么全部成功,要么全部回滚,保证数据一致性。
事务的基本操作
事务操作主要包含三个步骤:
- 开启事务:
start transaction/begin - 提交事务:
commit(全部成功) - 回滚事务:
rollback(任一操作异常)
Spring 中的事务实现
Spring 提供了两种事务处理方式:
- 编程式事务:手动编写代码控制事务边界。
- 声明式事务:基于注解自动管理,推荐在业务层使用。
准备工作
我们需要准备数据库表结构及对应的 Service 代码。这里涉及两张表:log_info 和 user_info。

Spring 编程式事务
这种方式需要手动获取 TransactionStatus 并调用 commit 或 rollback。
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;
@RestController
@Slf4j
@RequestMapping("/User")
{
UserInfoService userInfoService;
DataSourceTransactionManager dataSourceTransactionManager;
TransactionDefinition transactionDefinition;
String {
dataSourceTransactionManager.getTransaction(transactionDefinition);
userInfoService.registryUser(name, password);
log.info();
dataSourceTransactionManager.commit(transactionStatus);
;
}
}


