欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

添加一個(gè)SqlSessionTemplate對象,讓我們對業(yè)務(wù)方法進(jìn)行try catch,沒有異常則進(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. 測試

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

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

二、事務(wù)管理器

1. 簡介

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

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

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

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

我們使用MyBatis操作數(shù)據(jù)庫,接下來使用 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ù)的定義信息對象,它有如下方法:

  • String getName():獲取事務(wù)對象名稱
  • 。int getIsolationLevel():獲取事務(wù)的隔離級別。
  • 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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MyBatis批量插入/修改/刪除MySql數(shù)據(jù)

    MyBatis批量插入/修改/刪除MySql數(shù)據(jù)

    這篇文章主要給大家介紹了關(guān)于MyBatis批量插入/修改/刪除MySql數(shù)據(jù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • springboot jasypt2.x與jasypt3.x的使用方式

    springboot jasypt2.x與jasypt3.x的使用方式

    在軟件開發(fā)中,將配置文件中的敏感信息(如數(shù)據(jù)庫密碼)進(jìn)行加密是保障安全的有效手段,jasypt框架提供了這一功能,支持通過加密工具類或命令行工具生成密文,并通過修改配置文件和啟動(dòng)參數(shù)的方式使用密文和密鑰,這樣即便配置文件被泄露
    2024-09-09
  • java常用數(shù)據(jù)流應(yīng)用實(shí)例解析

    java常用數(shù)據(jù)流應(yīng)用實(shí)例解析

    這篇文章主要介紹了java常用數(shù)據(jù)流應(yīng)用實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • IDEA如何修改項(xiàng)目的JDK版本

    IDEA如何修改項(xiàng)目的JDK版本

    文章講述了如何在IDEA中修改項(xiàng)目的JDK版本以解決Maven構(gòu)建HibernateDemo時(shí)遇到的版本問題,Hibernate 5需要JDK 1.8,下載并安裝JDK 1.8后,無需配置環(huán)境變量,而是通過IDEA的項(xiàng)目結(jié)構(gòu)設(shè)置來更換項(xiàng)目JDK版本
    2024-12-12
  • OpenFeign設(shè)置header的三種方式總結(jié)

    OpenFeign設(shè)置header的三種方式總結(jié)

    在微服務(wù)間使用Feign進(jìn)行遠(yuǎn)程調(diào)用時(shí)需要在header中添加信息,下面這篇文章主要給大家介紹了關(guān)于OpenFeign設(shè)置header的三種方式,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • Java ArrayAdapter用法案例詳解

    Java ArrayAdapter用法案例詳解

    這篇文章主要介紹了Java ArrayAdapter用法案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 基于Javamail實(shí)現(xiàn)發(fā)送郵件(QQ/網(wǎng)易郵件服務(wù)器)

    基于Javamail實(shí)現(xiàn)發(fā)送郵件(QQ/網(wǎng)易郵件服務(wù)器)

    這篇文章主要介紹了基于Javamail實(shí)現(xiàn)發(fā)送郵件,分別使用QQ郵箱作為smtp郵件服務(wù)器發(fā)送郵件,使用網(wǎng)易郵箱作為smtp郵件服務(wù)器發(fā)送郵件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Java 獲取網(wǎng)站圖片的示例代碼

    Java 獲取網(wǎng)站圖片的示例代碼

    本文主要介紹了Java 獲取網(wǎng)站圖片的示例代碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • SpringBoot 整合 Shiro 密碼登錄與郵件驗(yàn)證碼登錄功能(多 Realm 認(rèn)證)

    SpringBoot 整合 Shiro 密碼登錄與郵件驗(yàn)證碼登錄功能(多 Realm 認(rèn)證)

    這篇文章主要介紹了SpringBoot 整合 Shiro 密碼登錄與郵件驗(yàn)證碼登錄(多 Realm 認(rèn)證),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • Java接口異步調(diào)用

    Java接口異步調(diào)用

    這篇文章主要介紹了Java接口異步調(diào)用,下面我們來一起學(xué)習(xí)一下吧
    2019-05-05

最新評論