import org.springframework.transaction.annotation.Transactional
默认隔离级别为使用数据库的隔离级别
默认传播行为REQURED(使用当前事务)
在service实现类方法上加@Transactional(rollbackFor = Exception.class)
rollback是产生该异常时会回滚 不加默认是RuntimeException级别

这样产生异常时 数据库就不会执行更改了
@EnableTransactionManagement
不加也行 TransactionAutoConfiguration类会默认加载,默认会带这个注解
失效场景:
调用本类中的方法,会导致被调用的方法的@Transactional注解失效,原因是没有使用代理。
解决办法:
1.新建一个实现类去调用原实现类中的方法
2.采用代理的方式调用
public class UserServiceimpl implements UserService , ApplcationContextAware
实现ApplcationContextAware接口
//实现生命周期方法,设置 IoC 容器
override
puublic roid setApplicationContext (ApplicationContext applicationContext)
throws BeansException{
this.applicationContext = applicationContext ;
}
//IOC容器中取代理对象
UserService userService = applicationContext.getBean(UserService.class) ;
这样再调用本类的方法就可以了。