事务如何在SpringBoot+Mybatis中使用?

同步操作才会用到

典型案例

@Service
public class OrderService {
    
    @Autowired
    private OrderRepository orderRepo;
    
    @Autowired
    private InventoryRepository inventoryRepo;
    
    @Autowired
    private PaymentRepository paymentRepo;
    
    // 典型的事务应用:创建订单需要操作多个表,必须保证原子性
    @Transactional
    public void createOrder(Order order) {
        // 1. 扣减库存
        inventoryRepo.reduceStock(order.getProductId(), order.getQuantity());
        
        // 2. 创建订单记录
        orderRepo.save(order);
        
        // 3. 创建支付记录
        paymentRepo.createPayment(order.getOrderId(), order.getAmount());
        
        // 如果以上任何一步失败,之前的所有操作都会回滚
    }
}

Spring Boot 默认已启用事务管理,你只需在启动类上添加 @EnableTransactionManagement,在需要使用事务的地方使用@Transactional注解

有事务是不是不需要外键了?

事务与外键的对比与选择结果

📌 核心结论

事务(@Transactional)和外键(FOREIGN KEY)是互补关系,而非替代关系
二者在不同层面保障数据完整性,需根据架构特点选择组合方案

🔍 对比分析

维度 事务 外键
作用层级 应用层 数据库层
主要能力 保证操作原子性 保证数据参照完整性
生效范围 单个业务方法内 全库所有操作
性能影响 事务隔离级别影响并发 增删改时触发约束检查
架构适应性 适合所有架构 仅适合单体数据库架构
全部评论

相关推荐

05-26 10:24
门头沟学院 Java
qq乃乃好喝到咩噗茶:其实是对的,线上面试容易被人当野怪刷了
找工作时遇到的神仙HR
点赞 评论 收藏
分享
07-15 00:33
江苏大学 Java
代码飞升:哈哈哈哈评论区三个打广告的
简历中的项目经历要怎么写
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务