1.1 事务
spring给我们提供了编程式事务以及声明式两种事务。比如我们日常写的基于XML配置的事务管理以及基于注解的方式都是一个声明式事务,但是有很多同学在使用注解方式的时候会出现很多时候事务不生效的问题,可能是同学没有完全理解到其中的原理。这篇文章主要是教会大家使用编程式事务,介绍TransactionTemplate类。
1.2 TransactionTemplate介绍
TransactionTemplate是Spring框架中用于编程式事务管理的一个类。编程式事务管理需要开发者手动编写代码来管理事务的边界,包括开始事务、提交事务和回滚事务等。而TransactionTemplate则提供了一种简化编程式事务管理的方式。
TransactionTemplate是一个线程安全的类,可以在多个业务方法中使用。它使用回调机制,将事务管理的代码与业务逻辑代码分离,使得业务代码更加清晰和易于维护。开发者只需关注业务逻辑的实现,而无需关心事务管理的具体细节。
1.3 TransactionTemplate使用
主要介绍在同一个类当中进行使用,也解决了使用注解等需要新建一个service类进行代理处理等
@Service
@Slf4j
public class TransTest {@Resourceprivate CopperProductionYcleEdgerMapper mapper;@Resourceprivate TransactionTemplate transactionTemplate;public void save() {transactionTemplate.execute((status) -> {try {saveData();deleteData();} catch (Exception e) {status.setRollbackOnly();return false;}return true;});}public void deleteData() {mapper.delete(new LambdaQueryWrapper<CopperProductionYcleEdger>().eq(CopperProductionYcleEdger::getPeriod, "3333"));
// int a = 1 / 0;}public void saveData() {CopperProductionYcleEdger edger = new CopperProductionYcleEdger();edger.setPeriod("3333");edger.setCurrentMonth(1);edger.setName("2222");edger.setBatchNo("1111");mapper.insert(edger);int a = 1 / 0;CopperProductionYcleEdger edger1 = new CopperProductionYcleEdger();edger1.setPeriod("4444");edger1.setCurrentMonth(2);edger1.setName("5555");edger1.setBatchNo("6666");mapper.insert(edger1);
// int a = 1 / 0;}}
这个类主要是在我们日常进行开发时,在一个类当中进行多个方法的处理,总体是一个事务进行控制处理。
1.4 总结
TransactionTemplate还提供了其他一些有用的方法,如setPropagationBehavior()、setIsolationLevel()等,用于设置事务的传播行为和隔离级别等属性。这些方法使得开发者可以更加灵活地控制事务的行为。
总之,TransactionTemplate是Spring框架中一种强大的编程式事务管理工具,它简化了事务管理的复杂性,提高了代码的可读性和可维护性。