全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-20 8 分钟 ✍️ juanwangdev

事务控制基础

MyBatis 事务控制是保证数据一致性的核心机制。

事务类型

XML
<transactionManager type="JDBC"/>
<!-- 或 -->
<transactionManager type="MANAGED"/>
类型说明
JDBCMyBatis 管理事务,手动 commit/rollback
MANAGED容器管理事务(如 Spring)

手动提交模式

Java
SqlSession session = sqlSessionFactory.openSession();
try {
    mapper.insertUser(user1);
    mapper.insertOrder(order1);
    session.commit();  // 手动提交
} catch (Exception e) {
    session.rollback();  // 回滚
    throw e;
} finally {
    session.close();
}

自动提交模式

Java
SqlSession session = sqlSessionFactory.openSession(true);  // 自动提交
try {
    mapper.insertUser(user1);  // 自动提交
    mapper.insertOrder(order1);  // 自动提交
} finally {
    session.close();
}

注意:自动提交模式下,每条 SQL 单独提交,无法保证多操作原子性。

事务隔离级别

Java
// 开启时指定隔离级别
SqlSession session = sqlSessionFactory.openSession(
    ExecutorType.SIMPLE,
    TransactionIsolationLevel.READ_COMMITTED
);
隔离级别说明
READ_UNCOMMITTED读未提交(最低)
READ_COMMITTED读已提交
REPEATABLE_READ可重复读
SERIALIZABLE串行化(最高)

Spring 集成事务

Java
@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;
    
    @Transactional(rollbackFor = Exception.class)
    public void createUserWithOrder(User user, Order order) {
        userMapper.insertUser(user);
        orderMapper.insertOrder(order);
        // 任何异常抛出,整个事务回滚
    }
}

推荐:与 Spring 集成时使用 @Transactional 注解,自动管理事务边界。

要点总结

  • JDBC 事务需手动 commit/rollback,MANAGED 由容器管理
  • 自动提交模式每条 SQL 单独提交,不保证原子性
  • 多操作需保证原子性时,使用手动提交或 @Transactional
  • 推荐与 Spring 集成使用 @Transactional 管理事务

📝 发现内容有误?点击此处直接编辑

← 上一篇 接口绑定原理
下一篇 → 单表查询操作
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库