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

springboot編程式事務TransactionTemplate的使用說明

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

TransactionTemplate的使用

總結:在類中注入TransactionTemplate,即可在springboot中使用編程式事務。

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

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

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

1.為何用?

多數(shù)情況下,方法上聲明@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() {
? ? ? ? //數(shù)據(jù)庫查詢
? ? ? ? dao.select(1);
? ? ? ? return transactionTemplate.execute(status -> {
? ? ? ? ? ? //數(shù)據(jù)庫新增
? ? ? ? ? ? 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;
            }
        });
    }  
}

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

相關文章

最新評論

逊克县| 金阳县| 张家港市| 张家口市| 平远县| 三原县| 乌兰察布市| 城固县| 泽库县| 淳安县| 昌图县| 罗平县| 陇南市| 新宁县| 尉氏县| 惠安县| 平定县| 乐山市| 康马县| 垫江县| 北辰区| 于都县| 巫溪县| 荣成市| 报价| 库车县| 永善县| 手游| 东至县| 沿河| 五指山市| 泗洪县| 奉新县| 余干县| 鄄城县| 庆阳市| 五指山市| 拉孜县| 岳池县| 石渠县| 铜川市|