mybatis 的事务管理

mybatis 的事务管理

MyBatis 提供了内置的事务管理器,主要包括以下两种事务管理方式:

JDBC 事务管理:直接使用 JDBC 的 commit 和 rollback 方法进行事务控制。
MANAGED 事务管理:适用于容器(如 Spring)托管事务,MyBatis 不会自己处理事务,而是交由容器来管理。

MANAGED 事务管理(Spring )

MANAGED 事务管理器通常用于与 Java EE 容器(如 JBoss、WebSphere)集成,或使用 Spring 来管理事务。在这种模式下,事务由容器或外部框架管理,MyBatis 本身不处理事务的 commitrollback

手动事务管

当不使用 Spring 等框架时,可以手动控制 MyBatis 的事务。手动管理事务通常需要通过 SqlSession (JDBC )来管理,SqlSession 提供了 commit()rollback() 方法,用于提交和回滚事务。

Spring管理 (声明式事物管理)

通过 Spring 的声明式事务管理,开发者可以通过注解来管理事务。只需在需要管理事务的方法上添加 @Transactional 注解,Spring 会自动管理事务的提交和回滚。若异常则执行 运行时异常 RuntimeException

**propagation**控制事务的传播行为 常用参数:REQUIRED , REQUIRES_NEW , SUPPORTS

**isolation**控制事务的隔离级别,常见的有 READ_COMMITTED , SERIALIZABLE

rollbackFor 控制哪些异常会触发事物回滚

事务的隔离级别

READ_UNCOMMITTED:事务可以读取未提交的数据,可能导致脏读。

READ_COMMITTED:只能读取已经提交的数据,防止脏读。

REPEATABLE_READ:事务开始后看到的数据是一致的,即使其他事务提交了数据,防止不可重复读。

SERIALIZABLE:最高的隔离级别,事务完全串行化执行,防止幻读。

事务的传播行为

传播行为定义了一个事务如何与其他事务交互,常见的传播行为包括:

REQUIRED:如果当前没有事务,创建一个新事务;如果已经存在事务,加入该事务。
REQUIRES_NEW:每次都会创建一个新事务,当前事务暂停。
NESTED:支持嵌套事务,外层事务回滚时,内层事务也会回滚。

MANDATORY: 如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。

NEVER: 以非事务方式执行,如果当前存在事务,则抛出异常。

NESTED: 如果当前存在事务,则在当前事务中开启一个嵌套事务(逻辑上的嵌套,在不同数据库中的实现方式可能不同)。嵌套事务在提交或回滚时与外层事务有一定的关联。一般情况下,外层事务提交成功后,嵌套事务才会真正提交;如果嵌套事务回滚,外层事务可以选择继续执行或者一起回滚。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进击的程序员1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值