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

Spring中事務(wù)管理方案和事務(wù)管理器及事務(wù)控制的API詳解

 更新時(shí)間:2023年08月09日 09:15:27   作者:會(huì)洗碗的CV工程師  
這篇文章主要介紹了Spring中事務(wù)管理方案和事務(wù)管理器及事務(wù)控制的API詳解,事務(wù)管理是指對(duì)事務(wù)進(jìn)行管理和控制,以確保事務(wù)的正確性和完整性,事務(wù)管理的作用是保證數(shù)據(jù)庫(kù)的數(shù)據(jù)操作的一致性和可靠性,需要的朋友可以參考下

一、事務(wù)管理方案

聲明式事務(wù)底層采用AOP技術(shù),在service層手動(dòng)添加事務(wù)

1. 修改業(yè)務(wù)層代碼

添加一個(gè)SqlSessionTemplate對(duì)象,讓我們對(duì)業(yè)務(wù)方法進(jìn)行try catch,沒(méi)有異常則進(jìn)行提交,捕捉到異?;貪L即可。

package com.example.service;
import com.example.dao.AccountDao;
import com.example.pojo.Account;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
@Service
public class AccountService {
    @Autowired
    private AccountDao accountDao;
    @Autowired
    private SqlSessionTemplate sessionTemplate;
    /**
     *
     * @param id1 轉(zhuǎn)出人id
     * @param id2 轉(zhuǎn)入人id
     * @param price 金額
     */
    // 作用方法上時(shí),該方法都將具有該類型事務(wù)的事務(wù)屬性
    public void transfer(int id1,int id2, double price){
        try {
            // 轉(zhuǎn)出人減少余額
            Account account1 = accountDao.findById(id1);
            account1.setBalance(account1.getBalance() - price);
            accountDao.update(account1);
            // 模擬程序出錯(cuò)
            int i = 1 / 0;
            // 轉(zhuǎn)入人增加余額
            Account account2 = accountDao.findById(id2);
            account2.setBalance(account2.getBalance() + price);
            accountDao.update(account2);
            sessionTemplate.commit();
        }
        catch (Exception e){
            e.printStackTrace();
            sessionTemplate.rollback();
        }
    }
}

2. 測(cè)試

OK,可以看到這里程序是出現(xiàn)異常中斷了的?,F(xiàn)在觀看數(shù)據(jù)庫(kù)里面的情況是怎么樣的。

OK,可以看到這里張三確實(shí)沒(méi)有被扣錢啊,所以手動(dòng)提交事務(wù)也是可以的,但是這樣我們的try catch就太多了。因此有了事務(wù)管理器。

二、事務(wù)管理器

1. 簡(jiǎn)介

Spring依賴事務(wù)管理器進(jìn)行事務(wù)管理,事務(wù)管理器即一個(gè)通知類,我們?yōu)樵撏ㄖ愒O(shè)置切點(diǎn)為service層方法即可完成事務(wù)自動(dòng)管理。

由于不同技術(shù)操作數(shù)據(jù)庫(kù),進(jìn)行事務(wù)操作的方法不同。

如:JDBC提交事務(wù)是 connection.commit() ,MyBatis提交事務(wù)是 sqlSession.commit() ,所以Spring提供了多個(gè)事務(wù)管理器。

事務(wù)管理器名稱作用
org.springframework.jdbc.datasource.DataSourceTransactionManager針對(duì)JDBC技術(shù)提供的事務(wù)管理器。適用于JDBC和MyBatis。
org.springframework.orm.hibernate3.HibernateTransactionManager針對(duì)于Hibernate框架提供的事務(wù)管理器。適用于Hibernate框架。
org.springframework.orm.jpa.JpaTransactionManager針對(duì)于JPA技術(shù)提供的事務(wù)管理器。適用于JPA技術(shù)。
org.springframework.transaction.jta.JtaTransactionManager跨越了多個(gè)事務(wù)管理源。適用在兩個(gè)或者是多個(gè)不同的數(shù)據(jù)源中實(shí)現(xiàn)事務(wù)控制。

我們使用MyBatis操作數(shù)據(jù)庫(kù),接下來(lái)使用 DataSourceTransactionManager 進(jìn)行事務(wù)管理。

2. 在配置文件中引入約束

xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd

3. 進(jìn)行事務(wù)配置

在applicationContext.xml文件新增配置

三、事務(wù)控制的API

事務(wù)管理器都實(shí)現(xiàn)了PlatformTransactionManager接口,Spring進(jìn)行事務(wù)控制的功能是由三個(gè)接口提供的,這三個(gè)接口是Spring實(shí)現(xiàn)的,在開發(fā)中我們很少使用到,只需要了解他們的作用即可:

1.PlatformTransactionManager接口

PlatformTransactionManager是Spring提供的事務(wù)管理器接口,所有事務(wù)管理器都實(shí)現(xiàn)了該接口。

該接口中提供了三個(gè)事務(wù)操作方法:

  • TransactionStatus getTransaction(TransactionDefinition definition):獲取事務(wù)狀態(tài)信息。
  • void commit(TransactionStatus status):事務(wù)提交
  • void rollback(TransactionStatus status):事務(wù)回滾

2.TransactionDefinition接口

TransactionDefinition是事務(wù)的定義信息對(duì)象,它有如下方法:

  • String getName():獲取事務(wù)對(duì)象名稱
  • 。int getIsolationLevel():獲取事務(wù)的隔離級(jí)別。
  • int getPropagationBehavior():獲取事務(wù)的傳播行為。
  • int getTimeout():獲取事務(wù)的超時(shí)時(shí)間。
  • boolean isReadOnly():獲取事務(wù)是否只讀。

3.TransactionStatus接口

TransactionStatus是事務(wù)的狀態(tài)接口,它描述了某一時(shí)間點(diǎn)上事務(wù)的狀態(tài)信息。

它有如下方法:

  • void flush()  刷新事務(wù)
  • boolean hasSavepoint() 獲取是否存在保存點(diǎn)
  • boolean isCompleted() 獲取事務(wù)是否完成
  • boolean isNewTransaction() 獲取是否是新事務(wù)
  • boolean isRollbackOnly() 獲取是否回滾
  • void setRollbackOnly()  設(shè)置事務(wù)回滾

到此這篇關(guān)于Spring中事務(wù)管理方案和事務(wù)管理器及事務(wù)控制的API詳解的文章就介紹到這了,更多相關(guān)Spring事務(wù)API內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java微信公眾平臺(tái)開發(fā)(2) 微信服務(wù)器post消息體的接收

    Java微信公眾平臺(tái)開發(fā)(2) 微信服務(wù)器post消息體的接收

    這篇文章主要為大家詳細(xì)介紹了Java微信公眾平臺(tái)開發(fā)第二步,微信服務(wù)器post消息體的接收,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • 輕松掌握java中介者模式

    輕松掌握java中介者模式

    這篇文章主要幫助大家輕松掌握java中介者模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • springboot項(xiàng)目啟動(dòng)后執(zhí)行方法的三種方式

    springboot項(xiàng)目啟動(dòng)后執(zhí)行方法的三種方式

    有時(shí)項(xiàng)目需求,需要項(xiàng)目啟動(dòng)的時(shí)候向數(shù)據(jù)庫(kù)中查詢一下系統(tǒng)屬性,或者需要加載某個(gè)特定的方法,下面這篇文章主要給大家介紹了關(guān)于springboot項(xiàng)目啟動(dòng)后執(zhí)行方法的三種方式,需要的朋友可以參考下
    2022-06-06
  • springboot默認(rèn)的5種加載路徑詳解

    springboot默認(rèn)的5種加載路徑詳解

    這篇文章主要給大家介紹了關(guān)于springboot默認(rèn)的5種加載路徑,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用springboot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-05-05
  • MAVEN_HOME、M2_HOME,maven環(huán)境變量設(shè)置方式

    MAVEN_HOME、M2_HOME,maven環(huán)境變量設(shè)置方式

    這篇文章主要介紹了MAVEN_HOME、M2_HOME,maven環(huán)境變量設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • java自定義線程模型處理方法分享

    java自定義線程模型處理方法分享

    本文給大家總結(jié)分享了下個(gè)人關(guān)于java處理自定義線程模型的一些經(jīng)驗(yàn)和處理方法,有需要的小伙伴可以參考下
    2016-08-08
  • RabbitMQ實(shí)現(xiàn)Work Queue工作隊(duì)列的示例詳解

    RabbitMQ實(shí)現(xiàn)Work Queue工作隊(duì)列的示例詳解

    工作隊(duì)列(又稱任務(wù)隊(duì)列)的主要思想是避免立即執(zhí)行資源密集型任務(wù),而不得不等待它完成。本篇文章將記錄和分享RabbitMQ工作隊(duì)列相關(guān)的知識(shí)點(diǎn),希望對(duì)大家有所幫助
    2023-01-01
  • java中的通用權(quán)限管理設(shè)計(jì)(推薦)

    java中的通用權(quán)限管理設(shè)計(jì)(推薦)

    下面小編就為大家推薦一篇java中的通用權(quán)限管理設(shè)計(jì),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • 詳解MyBatis動(dòng)態(tài)代理機(jī)制

    詳解MyBatis動(dòng)態(tài)代理機(jī)制

    MyBatis的動(dòng)態(tài)代理機(jī)制是其核心特性之一,通過(guò)該機(jī)制,開發(fā)者可以專注于定義接口和 SQL 映射,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2026-03-03
  • 從內(nèi)存地址解析Java的static關(guān)鍵字的作用

    從內(nèi)存地址解析Java的static關(guān)鍵字的作用

    這篇文章主要介紹了從內(nèi)存地址解析Java的static關(guān)鍵字的作用,包括靜態(tài)成員變量和靜態(tài)方法等重要內(nèi)容,需要的朋友可以參考下
    2015-10-10

最新評(píng)論

崇仁县| 福安市| 平谷区| 江口县| 丰原市| 育儿| 眉山市| 西城区| 攀枝花市| 南岸区| 读书| 铁力市| 左贡县| 历史| 本溪| 怀化市| 大方县| 北宁市| 方山县| 鹤峰县| 贵溪市| 白水县| 唐河县| 镇坪县| 汪清县| 荆门市| 双城市| 梅州市| 日喀则市| 荆州市| 潞西市| 双城市| 文登市| 乌恰县| 云和县| 临夏市| 武川县| 延吉市| 德化县| 红安县| 浦城县|