MyBatis 中支持 Spring 事务和 MyBatis 自身的事务两种方式,下面分别介绍这两种事务的使用方法。
1.Spring 事务
Spring 是一个非常流行的 Java 开发框架,它也提供了对于事务的支持。在 Spring 中,我们可以使用 @Transactional 注解来声明一个事务,从而实现对于数据库操作的事务管理。具体使用方法如下:首先,在 Spring 配置文件中开启事务管理器:
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
然后,在 Dao 层中使用 @Transactional 注解声明事务:
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
@Transactional
public void updateUser(User user) {
userMapper.update(user);
}
}
在上述代码中,我们使用了 @Transactional 注解声明了一个事务,当调用 updateUser() 方法时,会创建一个事务,并将 userMapper.update(user) 方法包含其中。如果 userMapper.update(user) 方法执行失败,会回滚事务,如果执行成功,则提交事务。
2.MyBatis 自身事务
首先,在 MyBatis 配置文件中配置事务管理器:
<transactionManager type="JDBC" />
然后,在 Dao 层中使用 SqlSession 提供的事务管理方法:
public interface UserMapper {
void updateUser(User user);
}
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
userMapper.updateUser(user);
sqlSession.commit();
} catch (Exception e) {
sqlSession.rollback();
throw e;
} finally {
sqlSession.close();
}
在上述代码中,我们通过 SqlSession 的 getMapper() 方法获取到 UserMapper 接口的实现对象,并调用其提供的 updateUser() 方法。当执行成功时,我们使用 sqlSession.commit() 提交事务;如果执行失败,则使用 sqlSession.rollback() 回滚事务。