在 Java + MyBatis 中,事务管理主要有 三种常见方式,根据你的项目结构选择即可。
Spring Boot 中一般已自动配置,只需在 Service 方法上加注解:
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
@Transactional
public void transfer() {
userMapper.decreaseMoney("A", 100);
// 模拟异常
int i = 1 / 0;
userMapper.increaseMoney("B", 100);
}
}
✅ 方法内所有 MyBatis 操作 要么全成功,要么全失败
@Transactional(
propagation = Propagation.REQUIRED,
isolation = Isolation.READ_COMMITTED,
rollbackFor = Exception.class
)
| 属性 | 说明 |
|---|---|
| propagation | 事务传播行为 |
| isolation | 事务隔离级别 |
| rollbackFor | 指定回滚异常 |
| timeout | 超时时间 |
❌ 以下情况事务不生效:
publicInnoDBMyBatis 自己管理事务:
SqlSession session = sqlSessionFactory.openSession(false); // false = 手动提交
try {
UserMapper mapper = session.getMapper(UserMapper.class);
mapper.insertUser(u1);
mapper.insertUser(u2);
session.commit();
} catch (Exception e) {
session.rollback();
} finally {
session.close();
}
✅ 适合 老项目 / 无 Spring
@Autowired
private TransactionTemplate transactionTemplate;
public void test() {
transactionTemplate.execute(status -> {
userMapper.insert();
return null;
});
}
| 方式 | 使用场景 |
|---|---|
| @Transactional | ✅ Spring 项目(首选) |
| SqlSession | 原生 MyBatis |
| TransactionTemplate | 精细控制 |
如果你愿意,可以告诉我:
我可以直接给你 可运行示例代码。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。