MyBatis 提供了两种事务管理方式:基于 JDBC 的事务管理和基于 MANAGED 的事务管理。对于这两种事务管理方式,MyBatis 提供了以下几种事务回滚策略:
-
默认回滚策略:
- 当使用 JDBC 事务管理时,默认的回滚策略是在发生运行时异常(RuntimeException)或者错误(Error)时回滚事务。
- 当使用 MANAGED 事务管理时,默认的回滚策略是在发生异常(Exception)或者错误(Error)时回滚事务。
-
手动设置回滚策略:
- 你可以通过在 MyBatis 的 XML 配置文件中设置
标签的
defaultRollback` 属性来手动指定全局的默认回滚策略。例如:
``` 这将会使得所有事务在发生任何异常时都进行回滚。 - 你还可以在每个 SQL 语句的
``` 这将会使得在执行插入操作时,如果发生 `java.lang.Exception` 异常,事务将回滚。 - 你可以通过在 MyBatis 的 XML 配置文件中设置
-
注解方式设置回滚策略:
- 如果你使用注解的方式定义 SQL 语句,可以在
@Options
注解中设置rollbackFor
属性来指定特定异常类型导致事务回滚。例如:@Insert("INSERT INTO users (name, age) VALUES (#{name}, #{age})") @Options(rollbackFor = Exception.class) int insertUser(User user);
这将会使得在执行插入操作时,如果发生java.lang.Exception
异常,事务将回滚。
- 如果你使用注解的方式定义 SQL 语句,可以在
-
全局异常处理器:
- 你还可以通过实现 MyBatis 的
org.apache.ibatis.executor.ErrorContext
接口来自定义全局的异常处理器,从而控制事务的回滚策略。例如:public class MyErrorContext implements ErrorContext { // 实现接口中的方法 }
然后在 MyBatis 的 XML 配置文件中指定这个自定义的异常处理器:
- 你还可以通过实现 MyBatis 的
总之,MyBatis 提供了多种方式来设置事务的回滚策略,你可以根据项目的需求选择合适的方式来实现。