什么是事务?
事务是指对数据库中的数据做出一系列操作,事务具有不可分割性、一致性、隔离性和持久性等特征。
在Spring框架中,事务管理支持两种方式:声明式事务和编程式事务。
编程式事务是指通过手动编写代码来管理事务的提交和回滚。在Spring框架的早期版本中,就已经提供了编程式事务的支持。开发人员可以通过使用Spring提供的事务管理器(如PlatformTransactionManager)来手动控制事务的边界、提交和回滚。
声明式事务允许开发人员通过注解或XML配置的方式来控制事务的提交和回滚,而无需编写繁琐的事务管理代码。这种方式使得开发人员可以更加专注于业务逻辑的实现,而将事务管理的细节交给Spring框架来处理。
在Spring框架中,@Transactional注解是声明式事务管理的主要方式。通过在方法或类上添加@Transactional注解,开发人员可以轻松地指定哪些方法需要事务支持,并配置相关的事务属性(如传播行为、隔离级别、超时时间等)。
编程式事务是需要我们手动去写创建和执行的,非常麻烦。
springboot中声明式事务只需要加一个注解就可以完成这些一些重复性操作:(这里最好不要写在测试类中,可能会出问题,测试框架(如 JUnit)通常有自己的事务管理机制)
我们只需要关心sql的执行,不需要去管数据库的连接,事务的提交和回滚问题。
@Transactional注解的使用:
@Transactional 可以标记在类上面(当前类所有的方法都运用上了事务)
@Transactional 标记在方法则只是当前方法运用事务
也可以类和方法上面同时都存在,如果类和方法都存在@Transactional会以方法的为准。如果方法上面没有@Transactional会以类上面的为准
建议:@Transactional写在方法上面,控制粒度更细,建议@Transactional写在业务逻辑层上,因为只有业务逻辑层才会有嵌套调用的情况。