最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot編程式事務(wù)TransactionTemplate的使用說明

 更新時間:2022年06月14日 11:18:41   作者:yzh_1346983557  
這篇文章主要介紹了springboot編程式事務(wù)TransactionTemplate的使用說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

TransactionTemplate的使用

總結(jié):在類中注入TransactionTemplate,即可在springboot中使用編程式事務(wù)。

spring支持編程式事務(wù)管理和聲明式事務(wù)管理兩種方式。

編程式事務(wù)管理使用TransactionTemplate或者直接使用底層的PlatformTransactionManager。對于編程式事務(wù)管理,spring推薦使用TransactionTemplate。

聲明式事務(wù)管理建立在AOP之上的。其本質(zhì)是對方法前后進行攔截,然后在目標方法開始之前創(chuàng)建或者加入一個事務(wù),在執(zhí)行完目標方法之后根據(jù)執(zhí)行情況提交或者回滾事務(wù)。對于聲明式事務(wù)管理,springboot中推薦使用@Transactional注解。

1.為何用?

多數(shù)情況下,方法上聲明@Transactional注解聲明事務(wù)即可,簡單、快捷、方便,但@Transactional聲明式事務(wù)的可控性太弱了,只可在方法或類上聲明,做不到細粒度的事務(wù)控制。

如果一個方法前10條sql都是select查詢語句,只有最后2條sql是update語句,那么只對最后2條sql做事務(wù)即可。

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事務(wù)管理器以及自動注入配置類DataSourceTransactionManagerAutoConfiguration。

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

@Service
public class TestServiceImpl {
? ? @Resource
? ? private TransactionTemplate transactionTemplate;
? ? public Object testTransaction() {
? ? ? ? //數(shù)據(jù)庫查詢
? ? ? ? dao.select(1);
? ? ? ? return transactionTemplate.execute(status -> {
? ? ? ? ? ? //數(shù)據(jù)庫新增
? ? ? ? ? ? dao.insert(2);
? ? ? ? ? ? dao.insert(3);
? ? ? ? ? ? return new Object();
? ? ? ? });
? ? }
}

TransactionTemplate簡單使用

/**
 * 事務(wù)模板
 * @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;
            }
        });
    }  
}

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。 

相關(guān)文章

最新評論

黑龙江省| 济南市| 溧阳市| 南部县| 灵川县| 闸北区| 门头沟区| 志丹县| 广元市| 乐清市| 伊吾县| 民权县| 福贡县| 青田县| 白朗县| 保德县| 岳阳县| 开原市| 田阳县| 焦作市| 陇川县| 德惠市| 凤山县| 太保市| 潮安县| 榆树市| 武平县| 平凉市| 抚顺市| 黔西县| 左贡县| 普定县| 天柱县| 呼图壁县| 如东县| 嫩江县| 遂昌县| 绥芬河市| 苏尼特右旗| 嘉黎县| 五指山市|