阅读量:0
MyBatis 支持事务回滚,你可以通过编程方式或者声明式方式来实现。下面是两种方法的详细介绍:
- 编程式事务管理:
在编程式事务管理中,你需要手动控制事务的开始、提交和回滚。以下是一个简单的示例:
import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; public class MyBatisTransactionDemo { public static void main(String[] args) { SqlSessionFactory sqlSessionFactory = ... // 获取 SqlSessionFactory 实例 try (SqlSession sqlSession = sqlSessionFactory.openSession()) { // 开始事务 sqlSession.getConnection().setAutoCommit(false); // 执行数据库操作 // ... // 提交事务 sqlSession.commit(); } catch (Exception e) { // 回滚事务 sqlSession.rollback(); e.printStackTrace(); } } }
- 声明式事务管理(Spring 集成):
当使用 Spring 集成 MyBatis 时,可以使用 Spring 的声明式事务管理。这样,你只需要在需要事务支持的方法上添加 @Transactional
注解,Spring 会自动为你管理事务。以下是一个简单的示例:
首先,配置 Spring 的事务管理器:
<!-- applicationContext.xml --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <tx:annotation-driven transaction-manager="transactionManager" />
然后,在需要事务支持的方法上添加 @Transactional
注解:
import org.springframework.transaction.annotation.Transactional; @Service public class UserService { @Autowired private UserMapper userMapper; @Transactional public void createUser(User user) { try { userMapper.insert(user); // 其他数据库操作 // ... } catch (Exception e) { // 发生异常,Spring 会自动回滚事务 throw e; } } }
在这个示例中,如果 createUser
方法中的任何操作失败并抛出异常,Spring 将自动回滚事务。