MyBatis提供了两种方式来管理事务:编程式事务和声明式事务。
1. 编程式事务
在MyBatis中,可以使用SqlSession对象来控制事务的提交和回滚。以下是一个简单的示例:
```
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
// 开始事务
sqlSession.getConnection().setAutoCommit(false);
// 执行数据库操作
sqlSession.insert("insertUser", user);
sqlSession.update("updateAccount", account);
// 提交事务
sqlSession.commit();
} catch (Exception e) {
// 回滚事务
sqlSession.rollback();
} finally {
sqlSession.close();
}
```
2. 声明式事务
声明式事务是通过AOP实现的。在MyBatis中,可以使用Spring框架来实现声明式事务。以下是一个简单的示例:
首先,在Spring配置文件中配置事务管理器:
```
```
然后,在Mapper接口中添加@Transactional注解:
```
@Transactional
public interface UserMapper {
void insertUser(User user);
void updateAccount(Account account);
}
```
最后,在Service层调用Mapper方法即可:
```
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public void addUser(User user, Account account) {
userMapper.insertUser(user);
userMapper.updateAccount(account);
}
}
```
这样,当执行addUser方法时,如果出现异常,事务会自动回滚。