温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

springboot编程式事务TransactionTemplate如何使用

发布时间:2022-06-14 13:52:14 来源:亿速云 阅读:1655 作者:iii 栏目:开发技术

本篇内容主要讲解“springboot编程式事务TransactionTemplate如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“springboot编程式事务TransactionTemplate如何使用”吧!

TransactionTemplate的使用

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

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

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

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

1.为何用?

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

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

2.如何用

        <dependency>             <groupId>org.mybatis.spring.boot</groupId>             <artifactId>mybatis-spring-boot-starter</artifactId>             <version>2.2.0</version>         </dependency>

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 TransactionTemplateSupport {  	@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("insert into user value (2,'aaa','aaa','aaa')");      }        public void test2(){        getRequiresNewTransactionTemplate()       //  transactionTemplate                 .execute(new TransactionCallback<Void>() {               @Override             public Void doInTransaction(TransactionStatus status) {                   jdbcTemplate.execute("insert into user value (11,'BBBB','aaa','aaa')");                   int i = 1/0;                  jdbcTemplate.execute("insert into user value (21,'aaa','NNNN','aaa')");                   return null;             }         });     }   }

到此,相信大家对“springboot编程式事务TransactionTemplate如何使用”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI