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

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

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

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

xml代碼

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

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

  我們在配置事務(wù)的時候,我們一般是把事務(wù)邊界設(shè)置到service層,也就是你的業(yè)務(wù)邏輯層,因為我們很多時候都是在我們的業(yè)務(wù)邏輯層來完成我們一些列的數(shù)據(jù)操作,如果放到Dao數(shù)據(jù)層,其粒度太小了。另外,如果我們把事務(wù)配置在業(yè)務(wù)邏輯層的話,對我們的二級緩存也是有好處的,這個大家以后實際操作的時候會發(fā)現(xiàn)。

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

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

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

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

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

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

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

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

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

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

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

相關(guān)文章

  • Java并發(fā)編程之關(guān)鍵字volatile的深入解析

    Java并發(fā)編程之關(guān)鍵字volatile的深入解析

    提高java的并發(fā)編程,就不得不提volatile關(guān)鍵字,不管是在面試還是實際開發(fā)中volatile都是一個應(yīng)該掌握的技能,這篇文章主要給大家介紹了關(guān)于Java并發(fā)編程之關(guān)鍵字volatile的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • Java核心庫實現(xiàn)簡單的AOP

    Java核心庫實現(xiàn)簡單的AOP

    這篇文章主要介紹了如何用Java核心庫實現(xiàn)簡單的AOP,幫助大家為了更好的理解和學(xué)習(xí)AOP的思想,感興趣的朋友可以了解下
    2020-08-08
  • Spring?JPA?deleteInBatch導(dǎo)致StackOverflow問題

    Spring?JPA?deleteInBatch導(dǎo)致StackOverflow問題

    這篇文章主要介紹了Spring?JPA?deleteInBatch導(dǎo)致StackOverflow問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 使用SpringBoot獲取resources文件路徑

    使用SpringBoot獲取resources文件路徑

    這篇文章主要介紹了使用SpringBoot獲取resources文件路徑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Java實戰(zhàn)項目 健身管理系統(tǒng)

    Java實戰(zhàn)項目 健身管理系統(tǒng)

    本文是一個Java語言編寫的實戰(zhàn)項目,是一個健身管理系統(tǒng),主要用到了ssm+springboot等技術(shù),技術(shù)含量筆記高,感興趣的童鞋跟著小編往下看吧
    2021-09-09
  • Java實現(xiàn)經(jīng)典游戲泡泡堂的示例代碼

    Java實現(xiàn)經(jīng)典游戲泡泡堂的示例代碼

    這篇文章將利用Java制作經(jīng)典游戲——泡泡堂,游戲設(shè)計為雙人pk積分賽模式,在這個模式里面,玩家只要率先達(dá)到一定分?jǐn)?shù)既可以贏得比賽。感興趣的可以了解一下
    2022-04-04
  • Java中的vector類使用方法示例詳解

    Java中的vector類使用方法示例詳解

    這篇文章主要介紹了Java vector類的使用詳解及實例的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Java 8中日期和時間的處理方法

    Java 8中日期和時間的處理方法

    Java 8新增了LocalDate和LocalTime接口,接下來通過本文給大家介紹Java 8中日期和時間的處理方法,非常不錯,感興趣的朋友一起看下吧
    2016-08-08
  • Java使用Statement接口執(zhí)行SQL語句操作實例分析

    Java使用Statement接口執(zhí)行SQL語句操作實例分析

    這篇文章主要介紹了Java使用Statement接口執(zhí)行SQL語句操作,結(jié)合實例形式詳細(xì)分析了Java使用Statement接口針對mysql數(shù)據(jù)庫進(jìn)行連接與執(zhí)行SQL語句增刪改查等相關(guān)操作技巧與注意事項,需要的朋友可以參考下
    2018-07-07
  • Java Lambda表達(dá)式詳解和實例

    Java Lambda表達(dá)式詳解和實例

    這篇文章主要介紹了Java Lambda表達(dá)式詳細(xì)介紹,從簡單的到復(fù)雜的實例講解,需要的朋友可以參考下
    2014-05-05

最新評論

夹江县| 定安县| 德州市| 百色市| 眉山市| 寿宁县| 滨海县| 宣恩县| 张家口市| 清苑县| 沁阳市| 灵宝市| 海门市| 米脂县| 黔南| 安新县| 华安县| 美姑县| 大石桥市| 弥勒县| 临汾市| 山阳县| 巧家县| 大洼县| 蛟河市| 曲阳县| 安泽县| 体育| 沭阳县| 鹿泉市| 呼和浩特市| 留坝县| 永平县| 丘北县| 东方市| 吕梁市| 手游| 海口市| 云阳县| 开化县| 淳化县|