亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Spring與Hibernate整合事務(wù)管理的理解

 更新時(shí)間:2016年09月22日 11:44:36   作者:鬼球_Li  
這篇文章主要介紹了Spring與Hibernate整合事務(wù)管理的理解的相關(guān)資料,需要的朋友可以參考下

 在談Spring事務(wù)管理之前我們想一下在我們不用Spring的時(shí)候,在Hibernate中我們是怎么進(jìn)行數(shù)據(jù)操作的。在Hibernate中我們每次進(jìn)行一個(gè)操作的的時(shí)候我們都是要先開啟事務(wù),然后進(jìn)行數(shù)據(jù)操作,然后提交事務(wù),關(guān)閉事務(wù),我們這樣做的原因是因?yàn)镠ibernate默認(rèn)的事務(wù)自動(dòng)提交是false,他是需要我們?nèi)藶榈氖謩?dòng)提交事務(wù),假如你不想每次都手動(dòng)提交事務(wù)的話,你可以在hibernate.cfg.xml我文件中把它設(shè)置為事務(wù)自動(dòng)提交:

xml代碼

 <property name="defaultAutoCommit"> 
   <value>false</value> 
 </property> 
 

縱然我們把它的事務(wù)提交方式設(shè)置為自動(dòng),它可以進(jìn)行數(shù)據(jù)操作,但是這樣并不滿足我們實(shí)際的業(yè)務(wù)需求,因?yàn)橛袝r(shí)候在我保存一個(gè)數(shù)據(jù)之后,我希望他能繼續(xù)保存另一條數(shù)據(jù),我希望在保存完兩條或者多條之后一起進(jìn)行事務(wù)提交,這樣即使出錯(cuò),我們可以回滾,取保數(shù)據(jù)的一致性,要么都成功要么都失敗,這時(shí)候我們就不能每保存完一條數(shù)據(jù)之后事務(wù)就自動(dòng)提交,因?yàn)檫@樣它們不在同一個(gè)事務(wù)當(dāng)中,我們不能保證數(shù)據(jù)的一致行。所以這時(shí)候我們就需要手動(dòng)的來(lái)配置我們的事務(wù),這就需要用到Spring為Hibernate提供的事務(wù)管理機(jī)制,Spring提供的事務(wù)管理可以分為兩類:編程式的和聲明式的,編程式,其實(shí)就是在代碼里面來(lái)控制,像Hibernate操作數(shù)據(jù)一樣,開啟事務(wù),提交事務(wù),這種方式有一定的局限性,所以我們一般是用聲明式來(lái)配置我們的事務(wù)。

聲明式事務(wù)配置主要分以下幾步:

1、聲明式事務(wù)配置

  (1) 配置事務(wù)管理器;

  (2)事務(wù)的傳播特性;

  (3)那些類那些方法使用事務(wù)。

<!-- 配置事務(wù)管理器 指定其作用的sessionFactory把事務(wù)交給Spring去處理 --> 
 
  <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
  <property name="sessionFactory"> 
      <ref bean="sessionFactory"/> 
  </property> 
  </bean> 
 
<!-- 配置事務(wù)的傳播特性 --> 
  <tx:advice id="txAdvice" transaction-manager="transactionManager"> 
  <tx:attributes> 
  <tx:method name="save*" propagation="REQUIRED"/> 
  <tx:method name="delete*" propagation="REQUIRED"/> 
  <tx:method name="update*" propagation="REQUIRED"/> 
  <tx:method name="get*" read-only="true" propagation="NOT_SUPPORTED"/> 
  <tx:method name="*" read-only="true"/> 
  </tx:attributes> 
  </tx:advice> 
 
<!-- 那些類的哪些方法參與事務(wù) --> 
  <aop:config> 
  <aop:pointcut id="allServiceMethod" expression="execution(* com.coe.service.*.*(..))"/> 
  <aop:advisor pointcut-ref="allServiceMethod" advice-ref="txAdvice"/> 
  </aop:config>

  我們?cè)谂渲檬聞?wù)的時(shí)候,我們一般是把事務(wù)邊界設(shè)置到service層,也就是你的業(yè)務(wù)邏輯層,因?yàn)槲覀兒芏鄷r(shí)候都是在我們的業(yè)務(wù)邏輯層來(lái)完成我們一些列的數(shù)據(jù)操作,如果放到Dao數(shù)據(jù)層,其粒度太小了。另外,如果我們把事務(wù)配置在業(yè)務(wù)邏輯層的話,對(duì)我們的二級(jí)緩存也是有好處的,這個(gè)大家以后實(shí)際操作的時(shí)候會(huì)發(fā)現(xiàn)。

2、編寫業(yè)務(wù)邏輯方法

      這時(shí)候我們就可以在我們業(yè)務(wù)邏輯層用HibernateTemplate里面提供的數(shù)據(jù)操作方法來(lái)編寫我們的業(yè)務(wù)邏輯方法了,當(dāng)然我們的方法必須要是以我們事務(wù)配置里面配置的一樣,用save,delete,update,get做我們的方法的開頭。需要注意的是,默認(rèn)情況下運(yùn)行期異常才會(huì)回滾(包括繼承了RuntimeException子類),普通異常是不會(huì)滾的。

最后我們順便總結(jié)一下事務(wù)的幾種傳播特性:

1. PROPAGATION_REQUIRED: 如果存在一個(gè)事務(wù),則支持當(dāng)前事務(wù)。如果沒有事務(wù)則開啟;

2. PROPAGATION_SUPPORTS: 如果存在一個(gè)事務(wù),支持當(dāng)前事務(wù)。如果沒有事務(wù),則非事務(wù)的執(zhí)行;

3. PROPAGATION_MANDATORY: 如果已經(jīng)存在一個(gè)事務(wù),支持當(dāng)前事務(wù)。如果沒有一個(gè)活動(dòng)的事務(wù),則拋出異常;

4. PROPAGATION_REQUIRES_NEW: 總是開啟一個(gè)新的事務(wù)。如果一個(gè)事務(wù)已經(jīng)存在,則將這個(gè)存在的事務(wù)掛起;

5. PROPAGATION_NOT_SUPPORTED: 總是非事務(wù)地執(zhí)行,并掛起任何存在的事務(wù);

6. PROPAGATION_NEVER: 總是非事務(wù)地執(zhí)行,如果存在一個(gè)活動(dòng)事務(wù),則拋出異常;

7. PROPAGATION_NESTED:如果一個(gè)活動(dòng)的事務(wù)存在,則運(yùn)行在一個(gè)嵌套的事務(wù)中. 如果沒有活動(dòng)事務(wù), 則按TransactionDefinition.PROPAGATION_REQUIRED 屬性執(zhí)行。

 通過本文希望能幫助大家對(duì)Spring 和Hibernate 的整合事務(wù)管理的理解,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • Java新特性之Optional類超詳細(xì)介紹

    Java新特性之Optional類超詳細(xì)介紹

    這篇文章主要給大家介紹了關(guān)于Java新特性之Optional類超詳細(xì)介紹的相關(guān)資料,Java8中的Optional類是一個(gè)容器對(duì)象,可以包含null或非null值,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • Spring security權(quán)限配置與使用大全

    Spring security權(quán)限配置與使用大全

    Spring Security 本質(zhì)上是借助一系列的 Servlet Filter來(lái)提供各種安全性功能,但這并不需要我們手動(dòng)去添加或者創(chuàng)建多個(gè)Filter,本文重點(diǎn)給大家介紹spring-security的配置與使用及實(shí)現(xiàn)方式,感興趣的朋友一起看看吧
    2021-09-09
  • MySQL主鍵約束和外鍵約束的實(shí)現(xiàn)

    MySQL主鍵約束和外鍵約束的實(shí)現(xiàn)

    在MySQL中,主鍵和外鍵約束是通過約束來(lái)實(shí)現(xiàn)的,本文主要介紹了MySQL主鍵約束和外鍵約束的實(shí)現(xiàn), 具有一定的參考價(jià)值,感興趣的可以了解下
    2023-11-11
  • idea2023創(chuàng)建JavaWeb教程之右鍵沒有Servlet的問題解決

    idea2023創(chuàng)建JavaWeb教程之右鍵沒有Servlet的問題解決

    最近在寫一個(gè)javaweb項(xiàng)目,但是在IDEA中創(chuàng)建好項(xiàng)目后,在搭建結(jié)構(gòu)的時(shí)候創(chuàng)建servlet文件去沒有選項(xiàng),所以這里給大家總結(jié)下,這篇文章主要給大家介紹了關(guān)于idea2023創(chuàng)建JavaWeb教程之右鍵沒有Servlet問題的解決方法,需要的朋友可以參考下
    2023-10-10
  • Java設(shè)計(jì)模式之策略模式示例詳解

    Java設(shè)計(jì)模式之策略模式示例詳解

    策略模式屬于Java?23種設(shè)計(jì)模式中行為模式之一,該模式定義了一系列算法,并將每個(gè)算法封裝起來(lái),使它們可以相互替換,且算法的變化不會(huì)影響使用算法的客戶。本文將通過示例詳細(xì)講解這一模式,需要的可以參考一下
    2022-03-03
  • 如何理解SpringMVC

    如何理解SpringMVC

    Spring Web MVC是一種基于Java的實(shí)現(xiàn)了Web MVC設(shè)計(jì)模式的請(qǐng)求驅(qū)動(dòng)類型的輕量級(jí)Web框架,即使用了MVC架構(gòu)模式的思想,將web層進(jìn)行職責(zé)解耦,基于請(qǐng)求驅(qū)動(dòng)指的就是使用請(qǐng)求-響應(yīng)模型,框架的目的就是幫助我們簡(jiǎn)化開發(fā)
    2021-06-06
  • spring,mybatis事務(wù)管理配置與@Transactional注解使用詳解

    spring,mybatis事務(wù)管理配置與@Transactional注解使用詳解

    這篇文章主要介紹了spring,mybatis事務(wù)管理配置與@Transactional注解使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 詳解SpringBoot中的統(tǒng)一結(jié)果返回與統(tǒng)一異常處理

    詳解SpringBoot中的統(tǒng)一結(jié)果返回與統(tǒng)一異常處理

    這篇文章主要將通過詳細(xì)的討論和實(shí)例演示來(lái)幫助你更好地理解和應(yīng)用Spring Boot中的統(tǒng)一結(jié)果返回和統(tǒng)一異常處理,感興趣的小伙伴可以了解下
    2024-03-03
  • SpringBoot內(nèi)部調(diào)用事務(wù)不起作用問題的解決方案

    SpringBoot內(nèi)部調(diào)用事務(wù)不起作用問題的解決方案

    這篇文章主要介紹了SpringBoot事務(wù)不起作用問題的解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Springboot集成Kafka進(jìn)行批量消費(fèi)及踩坑點(diǎn)

    Springboot集成Kafka進(jìn)行批量消費(fèi)及踩坑點(diǎn)

    本文主要介紹了Springboot集成Kafka進(jìn)行批量消費(fèi)及踩坑點(diǎn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12

最新評(píng)論