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