@Transactional是一个用于声明式事务管理的注解,通常用在 Spring 框架中。
当一个方法被 @Transactional 注解时,表示该方法需要进行事务管理。如果方法执行过程中出现异常,那么事务会自动回滚;如果方法正常执行完毕,那么事务会自动提交。这样可以确保数据的一致性和完整性。
rollbackFor可以辅助@Transactional对事务的回滚操作,默认是只有运行异常才可以,进行事务的回滚。
@Transactional(rollbackFor = Exception.class) //spring事务管理//rollbackFor = Exception.class指,所有异常都会回滚,如果不加默认运行异常才会回滚@Overridepublic void delete(Integer id) throws Exception {deptMapper.deleteById(id);//根据Id删除部门数据
// int i = 1 / 0; //ArithmeticException异常if(true){throw new Exception("出错啦...");}empMapper.deleteByDeptId(id);//根据部门Id删除员工数据}
在Spring框架中,事务传播行为定义了七种类型,分别是:REQUIRED、SUPPORTS、MANDATORY、REQUIRES_NEW、NOT_SUPPORTED、NEVER和NESTED。
- REQUIRED:这是Spring的默认传播级别,如果上下文中存在事务则加入当前事务,如果不存在事务则新建事务执行。
- SUPPORTS:如果当前上下文存在事务,则支持当前事务,否则以非事务方式执行。
- MANDATORY:使用当前事务,如果当前没有事务则会抛出异常。
- REQUIRES_NEW:新建事务,如果当前存在事务,则把当前事务挂起。
- NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,则把当前事务挂起。
- NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。
- NESTED:如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。