Spring 事务实现方式:

发布于:2024-04-20 ⋅ 阅读:(22) ⋅ 点赞:(0)

在这里插入图片描述

Spring 事务实现方式:

Spring并不直接支持事务,只有当数据库支持事务的时候,Spring才支持事务,Spring只不过简化了开发人员实现事务的开发步骤

Spring事务的实现方式有两种:

一、基于申明式事务:

@Service
@Transactional
public class UserServiceImpl implements UserService{
    @Autowired
    private UserMapper userMapper;
    
    @Override
    public void updateUser(User user){
        userMapper.updateUser(user);
    }
}

通过在方法或类上面添加 @Transactional 注解来实现的,这种方式也称为基于注解的事务管理,他可以让开发者通过注解的方式来管理事务,而不需要手动编写事务管理代码,实现原理是基于Spring AOP 机制,当使用 @Transactional 注解时,Spring会自动将该方法或类进行事务增强。事务增强会在方法执行前开启事务,在方法执行后根据方法执行情况决定是提交事务还是回滚事务。

二、基于编式事务:

@Service
@Transactional
public class UserServiceImpl implements UserService{
    @Autowired
    private UserMapper userMapper;
    
    @Override
    public void updateUser(User user){
        
        transactionaTemplate.execute(new TransactionCallbackWithoutResult(){
            
            @Override
            protected void doInTransactionWithoutResult(TransactionStatus status)
            userMapper.updateUser(user);
        }
        
    });
    
     
}

是事物基于编程式事务,是通过使用 TransactionaTemplate 对象来实现的,TransactionaTemplate是Spring提供的一个用于管理事务的工具类。可以在代码中手动开启、提交、回滚事务,在上述代码中只用了 TransactionaTemplate 来管理事务。在 updateUser 方法中使用transactionaTemplate 的 execute方法来执行一个事务。

基于注解的事务适合简单的事物场景,可以提高开发效率和代码可读性,而基于编程是事务粒度细,适合复杂的事物场景,实际应用中可以根据具体情况选择适合自己的事务管理方式。