springboot编程式事务TransactionTemplate的使用说明

网友投稿 2733 2022-09-28

springboot编程式事务TransactionTemplate的使用说明

springboot编程式事务TransactionTemplate的使用说明

目录TransactionTemplate的使用1.为何用?2.如何用TransactionTemplate简单使用

TransactionTemplate的使用

总结:在类中注入TransactionTemplate,即可在springboot中使用编程式事务。

spring支持编程式事务管理和声明式事务管理两种方式。

编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。

声明式事务管理建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。对于声明式事务管理,springboot中推荐使用@Transactional注解。

1.为何用?

多数情况下,方法上声明@Transactional注解声明事务即可,简单、快捷、方便,但@Transactional声明式事务的可控性太弱了,只可在方法或类上声明,做不到细粒度的事务控制。

如果一个方法前10条sql都是select查询语句,只有最后2条sql是update语句,那么只对最后2条sql做事务即可。

2.如何用

org.mybatis.spring.boot

mybatis-spring-boot-starter

2.2.0

springboot中引入mybatis-spring-boot-starter依赖包即可。

mybatis-spring-boot-starter依赖包中包含了spring-boot-starter-jdbc的依赖,spring-boot-starter-jdbc中包含DataSourceTransactionManager事务管理器以及自动注入配置类DataSourceTransactionManagerAutoConfiguration。

代码中使用,在使用bean中注入TransactionTemplate即可:

@Service

public class TestServiceImpl {

@Resource

private TransactionTemplate transactionTemplate;

public Object testTransaction() {

//数据库查询

dao.select(1);

return transactionTemplate.execute(status -> {

//数据库新增

dao.insert(2);

dao.insert(3);

return new Object();

});

}

}

TransactionTemplate简单使用

/**

* 事务模板

* @author zz

*

*/

public class TransactionTemhttp://plateSupport {

@Autowired

private PlatformTransactionManager transactionManager;

private TransactionTemplate requiredTransactionTemplate;

protected TransactionTemplate getRequiresNewTransactionTemplate(){

if (requiredTransactionTemplate == null){

requiredTransactionTemplate = new TransactionTemplate(transactionManager);

requiredTransactionTemplate.setPropagationBehavior(TransactionTemplate.PROPAGATION_REQUIRED);

// requiredTransactionTemplate.setReadOnly(true);

// requiredTransactionTemplate.setTimeout(30000);

}

return requiredTransactionTemplate;

}

}

@Service

public class TestTransaction extends TransactionTemplateSupport {

@Autowired

private JdbcTemplate jdbcTemplate ;

@Autowired

private TransactionTemplate transactionTemplate;

// @Transactional

public void test(){

jdbcTemplate.execute("insert into user value (1,'aaa','aaa','aaa')");

int i = 1/0;

jdbcTemplate.execute(http://"insert into user value (2,'aaa','aaa','aaa')");

}

public void test2(){

getRequiresNewTransactionTemplate()

http:// // transactionTemplate

.execute(new TransactionCallback() {

@Override

public Void doInTransaction(TransactionStatus status) {

jdbcTemplate.execute("insert into user valhttp://ue (11,'BBBB','aaa','aaa')");

int i = 1/0;

jdbcTemplate.execute("insert into user value (21,'aaa','NNNN','aaa')");

return null;

}

});

}

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:痞子衡嵌入式:聊聊i.MXRT1170双核下不同GPIO组的访问以及中断设计
下一篇:《痞子衡嵌入式半月刊》 第 59 期
相关文章

 发表评论

暂时没有评论,来抢沙发吧~