@Transactional的用法
时间: 2023-10-12 15:18:25 浏览: 115
@Transactional是一个注解,它可以标记一个方法或类,并告诉Spring框架将其包装在一个事务中。在实际开发中,使用@Transactional注解可以简化事务管理的代码。
在方法级别使用@Transactional注解时,当方法被调用时,Spring框架会开启一个新的事务。如果方法执行成功,则提交事务;如果方法执行失败,则回滚事务。
在类级别使用@Transactional注解时,类中的所有公共方法都会继承该注解,这些方法会在同一个事务中执行。
@Transactional注解可以用于方法、类、接口和枚举类型上。以下是@Transactional注解的一些常用属性:
- propagation:事务的传播行为,默认为REQUIRED。
- isolation:事务的隔离级别,默认为DEFAULT。
- timeout:事务的超时时间,默认为-1,表示使用底层事务管理器的默认超时时间。
- readOnly:事务是否为只读模式,默认为false。
- rollbackFor:指定哪些异常会导致事务回滚。
- noRollbackFor:指定哪些异常不会导致事务回滚。
下面是一个使用@Transactional注解的示例:
```
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT)
public void addUser(User user) {
userDao.addUser(user);
}
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT)
public void updateUser(User user) {
userDao.updateUser(user);
}
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT)
public void deleteUser(int userId) {
userDao.deleteUser(userId);
}
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT)
public User getUser(int userId) {
return userDao.getUser(userId);
}
}
```
在上面的示例中,每个方法都使用了@Transactional注解,这意味着每个方法都在一个事务中执行。如果其中一个方法执行失败,则整个事务都会回滚。
阅读全文