温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java mybatis如何事务

发布时间:2026-10-13 20:51:34 来源:亿速云 阅读:116 作者:小樊 栏目:编程语言

在 Java + MyBatis 中,事务管理主要有 三种常见方式,根据你的项目结构选择即可。


一、使用 Spring + MyBatis(最推荐,最常用)

1️⃣ 声明式事务(注解方式,推荐)

(1)开启事务支持

Spring Boot 中一般已自动配置,只需在 Service 方法上加注解:

@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    @Transactional
    public void transfer() {
        userMapper.decreaseMoney("A", 100);
        // 模拟异常
        int i = 1 / 0;
        userMapper.increaseMoney("B", 100);
    }
}

✅ 方法内所有 MyBatis 操作 要么全成功,要么全失败


2️⃣ @Transactional 常用属性

@Transactional(
    propagation = Propagation.REQUIRED,
    isolation = Isolation.READ_COMMITTED,
    rollbackFor = Exception.class
)
属性 说明
propagation 事务传播行为
isolation 事务隔离级别
rollbackFor 指定回滚异常
timeout 超时时间

3️⃣ 注意事项(非常常见坑)

❌ 以下情况事务不生效:

  • 方法不是 public
  • 同类内部方法调用(自调用)
  • 捕获了异常未抛出
  • 数据库引擎不是 InnoDB

二、纯 MyBatis(不使用 Spring)

MyBatis 自己管理事务:

SqlSession session = sqlSessionFactory.openSession(false); // false = 手动提交
try {
    UserMapper mapper = session.getMapper(UserMapper.class);
    mapper.insertUser(u1);
    mapper.insertUser(u2);
    session.commit();
} catch (Exception e) {
    session.rollback();
} finally {
    session.close();
}

✅ 适合 老项目 / 无 Spring


三、Spring 编程式事务(不常用)

@Autowired
private TransactionTemplate transactionTemplate;

public void test() {
    transactionTemplate.execute(status -> {
        userMapper.insert();
        return null;
    });
}

四、MyBatis 事务核心总结

方式 使用场景
@Transactional ✅ Spring 项目(首选)
SqlSession 原生 MyBatis
TransactionTemplate 精细控制

如果你愿意,可以告诉我:

  • ✅ 是否使用 Spring / Spring Boot
  • ✅ 单表还是多表操作
  • ✅ 是否分布式事务

我可以直接给你 可运行示例代码。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手