日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

spring事务管理-概念部分

發布時間:2024/4/13 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring事务管理-概念部分 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這個Spring中的事務呢,是提供了一套可以管理項目中管理事務的機制,使用Spring事務的好處,就是我們的項目里面,不需要手動來管理事務了,那這樣的話咱們先復習一下,先復習一下事務,事務復習好像剛有過一次,hibernate中復習過事務,那接下來事務,相關的概念需要知道,第一事務特性,事務特性,要知道他是有ACID,然后呢再往下,事務并發產生的問題,并發問題,并發問題有臟讀,幻讀,不可重復讀,然后解決并發事務的,事務的隔離級別,那隔離級別的話,有四個,讀未提交,讀已提交,可重復讀,還有咱們的串行化,這四個級別,那這就是咱們之前學過的事務的特性,那接下來介紹一下,咱Spring提供的事務管理,Spring是把咱們事務管理的代碼,Spring封裝了事務管理代碼,那Spring封裝事務管理代碼的話,首先咱們說代碼,代碼的話,封裝的無非就是打開事務的代碼,還有提交事務的代碼,以及還有什么回滾事務的代碼,他封裝也就是封裝這些,但是在封裝的時候,有這么一個問題,你想好像原生的JDBC當中,你想要完成事務的這三個操作,代碼分別是,setAutoCommit為false,提交事務就是connection.commit(),回滾事務就是connection.rollback,后來咱們學了hibernate,你發現好像操作事務代碼好像有變化了,咱們在hibernate中打開事務,是session.begin...,然后提交事務是session.commit,然后回滾事務是session.rollback,那咱們后面,就不是我了,后面其他還會教你們一個,Mybatis,這個框架,那Mybatis框架,雖然沒學,但是你也應該知道,是用來操作數據庫的,他跟hibernate,功能是重合的,那這里面細想一下,到了Mybatis里面,好像操作事務的代碼,又會發生變化,是不是,hibernate中用Transaction對象,到Mybatis里面可能用一個咱們不知道的對象,萬一以后再有別的操作框架,第三個框架,是不是操作事務代碼又不一樣了,那Spring想操作事務封裝的代碼,好像還不太好封裝,對不對,因為不同的技術操作是不一樣的,于是Spring是要封裝的,他怎么做呢,如果是你們你們怎么做,這個時候首先,事務不管用什么來操作事務,事務咱們要干的事是一樣的,你不管在什么平臺用什么操作,操作事務永遠是打開提交回滾,是不是,所以Spring他封裝事務它是這樣,這就是基于接口,于是Spring他就提供了一個接口,封裝的事務操作,事務操作,因為在不同平臺,操作事務的代碼,各不相同,所以Spring他提供了一個接口,Spring他首先提供了一個接口,這個接口的名字呢,就叫做TrsanctionManager,PlatFormTransactionManager平臺事務管理器這個對象,于是他提供了一個接口,這個接口當中,這個接口當中的方法,封裝了事務操作的方法,只能聲明方法,他聲明了事務有哪些操作,聲明這些方法,針對不同平臺,他提供了不同的實現類,他提供不同的實現類,它會提供一個JDBCTransactionManager,然后等到hibernate平臺,它會提供一個hibernate,它會提供HibernateTransactionManager,Mybatis平臺我就不寫了,等你學到就知道了,那這樣的話你看,接口當中聲明事務有哪些操作,針對不同的平臺,是不是有不同的實現類,你像JDBCTransactionManager他封裝了操作事務代碼,Hibernate實現類里面,封裝的代碼就是這個Session和Transaction操作,所以玩Spring的事務,最核心的你要記住,你要知道,咱們操作事務的核心對象,是他,但是這個對象需要咱們寫嗎,這個接口需要咱們來實現嗎,不需要,咱們在不同的平臺,知道用不同的實現類就可以了,你只要記得是要用JDBC操作用的數據庫,等咱們后邊學了,hibernate與Spring整合之后,咱們到時候再玩事務就用這個,等將來你再用Mybatis,你用Mybatis那個,所以記住,這個接口或者底層的實現類,是咱們Spring操作事務最為核心的對象,注意在Spring中,玩事務管理,最為核心的對象,就是TransactionManager對象,要想玩事務,它是要配的,那接下來的話,咱們來介紹一下,那用它來玩的話,你還得知道與事務相關的屬性,Spring管理事務的屬性介紹,因為人家已經給你管理相關的代碼,一些管理事務的細節,有一些可選的細節,他還暴露出了選項讓你來選,比如這個事務給你封裝好了,但是你得配置,來配置這個事務,那這些事務的屬性包括哪些呢,事務的隔離級別,你可以去選擇,事務的隔離級別,然后呢,Spring想的很細的,想得很周到的,考慮到此次事務是否只讀,比如你這次操作,如果涉及到數據的增刪改,那你就把只讀操作關掉,因為這次可能要操作數據庫,如果把這個事務只讀打開,就意味著你不能修改數據庫任何數據的,如果你修改的話他給你報錯,別人想的很細,考慮的很周到,他顧慮的還有傳播行為,事務的傳播行為,事務傳播行為是咱們以前沒有聽說過的,接著來說一下事務傳播行為是啥東西,事務傳播行為是指在某種情況下,如何來管理事務,事務傳播行為,你們可以想象一下,將來咱們寫service,這里有一個service方法,哈哈,haha()方法,咱們的業務方法,這是咱們的service,然后還可能有一個業務方法,叫hehe(),按照咱們傳統的開發,按照咱們傳統的事務來說,咱們以前在完事務的時候,比如haha是業務方法,咱們在業務方法執行之前,是不是打開事務,打開事務,接下來執行業務方法,接下來關閉事務,關閉,你只考慮到在業務方法當中,需要干這些事,有沒有可能以后調業務方法存在haha()業務方法調用了hiahia()業務方法,聽明白啥意思,咱們現在好像service方法直接調DAO的,咱們業務還沒有復雜到平行的互相調用,但是如果平行互相調的話,那你haha打開事務關閉,那如果調用hiahia()也是打開事務,就有問題了,聽懂啥意思,所以事務的傳播行為,如果還是像現在一樣,業務方法不可能平行調的,這個屬性如果不存在,業務方法平行調的話,這個屬性對他來講沒有任何意義,壓根就沒用,事務傳播行為指的就是,業務方法之間,平行調用時如果來處理事務問題,傳播行為屬性決定業務方法之間,調用時,事務應該如何處理問題,那到底怎么來處理呢,也是給你很多選項,那選項有哪些呢,具體有7個選項

REQUIRED一個,SUPPORTS一個,MANDATORY一個,然后REQUIRED_NEW一個,NOT SUPPORTS一個,Spring給你想的多細,注冊FACEBOOK你注冊過嗎,注冊性別有10多種,10多種性別讓你選,人家就是考慮得這么周到,人類的性別有10多種,它是從性別分類的,他這個性別是性格分類的,不只是傳統的男和女,然后還有變性,還有男變女,女變男,他們當然說的比較專業了,人家考慮的就是周到,人家不僅考慮到業務之間的平行調用,還考慮到了N多種情況,供你選擇,哪怕他考慮的這些情況,百分之九十你一輩子用不著,但是人家考慮到了,而且確實是這樣,在這里一共是7種傳播行為的指令,第一種傳播行為,前面PROPAGATION是一個固定的前綴,取值要看后面,REQUIRED這第一個值,叫做必須的事務,啥意思呢,就是在haha和hiahia之間

互相調的時候,必須要帶有事務環境,才能調這個hiahia,采用的策略是,如果你haha沒有開事務,就去調hiahia,那么他就會開啟一個新的事務,聽懂啥意思不,如果haha已經把事務開了,那么再hiahia的時候,那么hiahia就使用,我好后悔這個方法名,如果haha已經開啟一個事務,那么他去調hiahia,然后hiahia就用haha已經開的事務,操作就可以了,聽明白啥意思了,明白啥意思了,我告訴你,雖然他講了很多,但是基本上都用這種,因為你理性的考慮一下是不是這個種最合理,haha如果開了事務,只能用haha的,他兩就在一個事務之內了,如果haha沒開,那就必須開一個新的事務,使其在事務當中,這也是咱們日常生活當中最常見的情況,其他的話你再看,這個SUPPORT,SUPPORT就相當隨意一些了,haha調hiahia的時候,那如果是已經開了事務了,那他沒用,如果沒開,那咱們就都不用,那就沒事務管理,挺明白啥意思,就是SUPPORTS,如果存在就用,不存在就拉到,然后MANDATORY,這是啥意思呢,就是需要你手動來開,你haha如果有事務那就沒問題,那如果haha沒事務,那你就必須手動開啟一個事務,不開那就報異常,有事務就用,沒事務就拋異常,然后再往下,REQUIRED_NEW這個單詞,是不是說的很清楚了,就和REQUIRED很類似,就是haha調用hiahia的時候,必須開啟一個事務,必須得開啟一個新的事務,不管haha他開不開事務,他就開啟一個新的事務,來執行hiahia,然后NOT_SUPPORTED,那就正好和SUPPORT對應了,就是以非事務方式運行,那就是如果有事務的話,那咱們就把一個事務先掛起,因為我不支持事務,先掛起,然后呢,hiahia必須在沒事務環境下操作,重新打開事務再繼續執行,haha如果有事務環境,調用hiahia需要把事務先掛起,這個事務先暫停,然后執行hiahia,執行完了以后再回來,然后再執行這個事務,實際開發中沒有這種業務情況,咱們在開發當中,只要是業務方法,不可能不存在事務的,NEVER,在英語國家這個語氣是很強烈的,永不,必須要以非事務運行,如果有事務存在,就必須拋出異常,就是堅決不能夠有事務,還有NESTED,NESTED就是,如果當前事務存在的話,那么會再開啟一個新的事務,讓這兩個之間互不干擾,他兩分別有兩個事務,聽明白啥意思不,叫NESTED,其實底下這6個,基本上都是扯淡的,看看明白啥意思,出去聊聊天用,其實這些東西背下來聊聊天挺好的,再說你這個舞臺就來了,但是用的話記住,切記REQUIRED,那這就是咱們的傳播行為,隔離級別我就配號寫上取值吧,把這個值配套粘過來,是不是隔離級別,只讀的話到時你看,true或者false,true是只讀,false是可操作

那這樣的話,咱們知道了,Spring當中,操作事務的核心對象是誰了,然后操作事務的屬性說了,就剩使用代碼來演示了

?

總結

以上是生活随笔為你收集整理的spring事务管理-概念部分的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。