ssh中處理事務(wù)的幾種方式

事務(wù)好渠,就是保證一系列業(yè)務(wù)邏輯全部執(zhí)行或者全部不執(zhí)行,在開發(fā)中节视,事務(wù)是怎么控制的呢拳锚?
方法一、使用hibernate的OpenSession()寻行。這種方式需要在業(yè)務(wù)邊界創(chuàng)建session霍掺,并將session作為參數(shù)傳遞到Dao層,以此來保證多個(gè)業(yè)務(wù)邏輯之間使用的是同一個(gè)session拌蜘。

         添加用戶的同時(shí)要完成addLog()和addUser()兩個(gè)操作:
           1. LogManagerImpl類中的添加日志

          public void addLog(Log log杆烁,Session session){
                  session.save(log,session);
           }
  1. UserManagerImpl類中完成所有業(yè)務(wù)邏輯
//openSession()創(chuàng)建session    
SessionFactory factory= new Configuration().configure();  
Session session=factory.openSession();            
//開啟事務(wù)           
session.beginTransaction();           
//執(zhí)行業(yè)務(wù)邏輯1. 保存user      
session.save(user);                
//Log和LogManagerImpl的創(chuàng)建由IoC控制                        
log.setTime(new Date());      
log.setType("操作日志");                
//執(zhí)行業(yè)務(wù)邏輯2. 保存log,同時(shí)傳遞session           
logManager.addLog(log,session);                   
session.getTransaction().commit();           
//使用openSession拦坠,當(dāng)最后一個(gè)業(yè)務(wù)邏輯完成后必須關(guān)閉session           
session.close();  
 方法二连躏、 使用Hibernate的getCurrentSession(),currentSession和openSession的區(qū)別在于贞滨,使用currentSession使用完畢后不用手動(dòng)關(guān)閉session入热。currentSession相當(dāng)于將session放到一個(gè)ThreadLocal中。
  1. LogManagerImpl類

       pubic  void addLog(Log log){
    
             //可以通過getCurrentSession()創(chuàng)建Session晓铆,不必使用傳遞的session
    
            Session session= factory.getCurrentSession()
    
            session.save(log);
    
     }
    
  2. UserManagerImpl類中完成所有業(yè)務(wù)邏輯

 //openSession()創(chuàng)建session        
SessionFactory factory= new Configuration().configure();        
Session session=factory.getCurrentSession();                
//開啟事務(wù)               
session.beginTransaction();               
//執(zhí)行業(yè)務(wù)邏輯1. 保存user          
session.save(user);                    
//Log和LogManagerImpl的創(chuàng)建由IoC控制                            
log.setTime(new Date());          
log.setType("操作日志");                    
//執(zhí)行業(yè)務(wù)邏輯2. 保存log              
logManager.addLog(log);                       
session.getTransaction().commit();               
//使用currentSession勺良,當(dāng)最后一個(gè)業(yè)務(wù)邏輯完成后不用關(guān)閉session
  1. 使用currentSession,需要在hibernate.cfg.xml配置文件中開啟事務(wù)
<property name="hibernate.current_session_context_class">thread</property>

方案三骄噪、將hibernate和spring集成尚困,使用spring框架的聲明式事務(wù)。使用spring的聲明式事務(wù)链蕊,不再需要自動(dòng)創(chuàng)建sessionFactory和Session事甜,不再需要手動(dòng)控制事務(wù)的開啟和關(guān)閉。
使用spring聲明式事務(wù)的幾個(gè)步驟:
1. applicationContext.xml中進(jìn)行配置

<!-- 配置spring事務(wù)管理器-->
    <bean id="transactionManager"
        class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="qq"></property>
    </bean>
    <!-- 配置spring事務(wù)滔韵,基于xml開發(fā)-->
    <!-- 激活自動(dòng)代理 -->
    <aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>
    <!-- 配置aop -->
    <aop:config>
    <aop:pointcut expression="execution(* com.hw.service.impl.*.*(..))" id="pointcut"/>
    <aop:advisor advice-ref="trcut" pointcut-ref="pointcut"/><!-- 增強(qiáng)切 -->
    </aop:config>
    <!-- 定義事務(wù)通知 -->
    <tx:advice id="trcut" transaction-manager="transactionManager">
    <!-- 定義事務(wù)傳播規(guī)則 -->
    <tx:attributes>
    <!-- REQUIRED的含義是支持當(dāng)前已經(jīng)存在的事務(wù),如果還沒有事務(wù)逻谦,就創(chuàng)建一個(gè)新事務(wù) 
    <tx:method name="*" propagation="REQUIRED"/> 
    表示所有方法都應(yīng)用REQUIRED事務(wù)規(guī)則-->
    <tx:method name="add*" propagation="REQUIRED"/>
    <tx:method name="update*" propagation="REQUIRED"/>
    <tx:method name="del*" propagation="REQUIRED"/>
    <tx:method name="*" propagation="REQUIRED" read-only="true"/>
    </tx:attributes> 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市陪蜻,隨后出現(xiàn)的幾起案子邦马,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件滋将,死亡現(xiàn)場離奇詭異邻悬,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)随闽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進(jìn)店門父丰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人橱脸,你說我怎么就攤上這事础米。” “怎么了添诉?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵屁桑,是天一觀的道長。 經(jīng)常有香客問我栏赴,道長蘑斧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任须眷,我火速辦了婚禮竖瘾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘花颗。我一直安慰自己捕传,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布扩劝。 她就那樣靜靜地躺著庸论,像睡著了一般。 火紅的嫁衣襯著肌膚如雪棒呛。 梳的紋絲不亂的頭發(fā)上聂示,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天,我揣著相機(jī)與錄音簇秒,去河邊找鬼鱼喉。 笑死,一個(gè)胖子當(dāng)著我的面吹牛趋观,可吹牛的內(nèi)容都是我干的扛禽。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼皱坛,長吁一口氣:“原來是場噩夢啊……” “哼旋圆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起麸恍,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后抹沪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體刻肄,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年融欧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了敏弃。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,100評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡噪馏,死狀恐怖麦到,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情欠肾,我是刑警寧澤瓶颠,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站刺桃,受9級特大地震影響粹淋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜瑟慈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一桃移、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧葛碧,春花似錦借杰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至缘琅,卻和暖如春粘都,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背刷袍。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工翩隧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人呻纹。 一個(gè)月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓堆生,卻偏偏與公主長得像,于是被迫代替她去往敵國和親雷酪。 傳聞我的和親對象是個(gè)殘疾皇子淑仆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)哥力,斷路器蔗怠,智...
    卡卡羅2017閱讀 134,600評論 18 139
  • 很多人喜歡這篇文章墩弯,特此同步過來 由淺入深談?wù)搒pring事務(wù) 前言 這篇其實(shí)也要?dú)w納到《常識》系列中,但這重點(diǎn)又...
    碼農(nóng)戲碼閱讀 4,706評論 2 59
  • 這部分的參考文檔涉及數(shù)據(jù)訪問和數(shù)據(jù)訪問層和業(yè)務(wù)或服務(wù)層之間的交互寞射。 Spring的綜合事務(wù)管理支持覆蓋很多細(xì)節(jié)渔工,然...
    竹天亮閱讀 1,033評論 0 0
  • 5.Spring的事務(wù) 通常情況下,J2EE有2種事務(wù)管理方式:全局事務(wù)和本地事務(wù)桥温,2種事務(wù)都比較明顯的缺陷引矩。 全...
    FTOLsXD閱讀 1,498評論 0 8
  • 這部分主要是開源Java EE框架方面的內(nèi)容,包括Hibernate侵浸、MyBatis旺韭、Spring、Spring ...
    雜貨鋪老板閱讀 1,349評論 0 2