Spring JDBC的事务管理

本文介绍了Spring JDBC的事务管理机制,包括如何通过注解实现声明式事务管理。内容涵盖事务的开启、提交和回滚,强调注解在接口方法上的应用,并指出必须存在接口且注解只对接口方法有效。此外,还提到了Spring JDBC事务管理中只对特定异常类型进行回滚的配置选项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

事务(Transaction):是数据库中的能够保证若干个写操作(增、删、改)要么全部成功,要么全部失败的机制。提示:关于Spring JDBC框架,只要项目中添加了基于Spring的数据库编程的依赖项,都包含Spring JDBC框架的依赖项,例如在mybatis-spring-boot-starter中就包含了spring-jdbc依赖项。

在基于Spring JDBC的项目中,只需要在业务方法上添加@Transactional即可使得此业务方法是事务性的,即具有“要么全部成功,要么全部失败”的特性。

这是一种声明式声务(因为注解也是声明的一部分,只需要声明,即可实现事务管理)。

关于添加@Transactional注解:

  • 【推荐--学习阶段】添加在接口上
    • 将作用于实现类中所有重写的方法
  • 【推荐--开发实践中】添加在接口的业务方法上
    • 将作用于实现类中重写的此方法
  • 添加在业务实现类上
    • 将作用于当前类中的所有业务方法
  • 添加在业务实现类的业务方法上
    • 将作用于当前业务方法

**注意:**基于Spring JDBC的事务管理,是基于接口实现的,所以,必须存在接口,且@Transactional注解只对接口中声明的方法是有效的,对于实现类中自定义的方法是无效的!

事务管理的核心概念:

  • **开启:**BEGIN
  • **提交:**COMMIT
  • **回滚:**ROLLBACK

在进行事务管理时,需要先开启事务,当所有的操作都正确的执行后,应该提交事务,此时,数据才会被写入到数据库存储中,如果执行过程中失败,应该回滚事务,则此前执行写操作都不会被写入到数据库存储中。

事务管理本质大致如下:

开启事务(关闭自动提交)
	-- 全部执行成功时:提交事务,即将数据写入到硬盘
	-- 出现错误时:回滚事务,放弃将已经成功执行的写操作写入到硬盘
打开自动提交

在Spring JDBC的事务管理中,大致如下:

try {
	【开启事务】
	执行你的业务方法
	【提交事务】
} catch (RuntimeException e) {
	【回滚事务】
}

**注意:**基于Spring JDBC的事务管理中,只对RuntimeException及其子孙类异常回滚!

在使用@Transactional注解时,可以配置rollbackFor / rollbackForClassName属性来指定对某些种类的异常回滚(仍必须是RuntimeException或其子孙类异常),也可以配置noRollbackFor / noRollbackForClassName属性来指定对某些种类的异常不回滚。

【关于Spring JDBC事务管理的小结】

  • 当某个业务涉及超过1次增、删、改操作(例如2次增、1次增和1次改、1次删和1改,甚至更多次),必须保证此业务是事务性的
  • 在接口中的抽象方法上添加@Transactional注解,即可使得此方法是事务性的
    • 在学习阶段,推荐在业务接口上添加此注解,避免遗漏
  • 在实现业务的过程中,当视为“失败”时,应该抛出RuntimeException或其子孙类异常,使得事务管理机制执行回滚

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值