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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring中配置Hibernate事务的四种方式

發(fā)布時間:2025/3/15 javascript 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring中配置Hibernate事务的四种方式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

為了保證數(shù)據(jù)的一致性,在編程的時候往往需要引入事務(wù)這個概念。事務(wù)有4個特性:原子性、一致性、隔離性、持久性。

???????? 事務(wù)的種類有兩種:編程式事務(wù)和聲明式事務(wù)。編程式事務(wù)就是將事務(wù)處理放在程序中,而聲明式事務(wù)則是通過配置文件或者注解進(jìn)行操作。

???????? 在spring中有聲明式事務(wù)的概念,通過和hibernate類似框架的集成,可以很好的完成聲明式事務(wù)。

???????? 其實(shí),不論在Spring中有幾種配置Hibernate事務(wù)的方法,都逃不出一下幾條:

? ? ? ???1.配置SessionFactory

? ? ? ???2.配置事務(wù)容器

? ? ? ???3.配置事務(wù)規(guī)則

? ? ? ???4.配置事務(wù)入口

? ? ? ? ?后面一共為大家提供4種配置Hibernate事務(wù)的方法。

? ? ? ? ?首先說下配置SessionFactory,配置SessionFactory有兩種方式,一種是通過配置hibernate.cfg.xml文件的位置來配置SessionFactory,另一種就是在Spring配置文件中,手動配置數(shù)據(jù)源。

? ? ? ? ?下面是兩種配置SessionFactory的方式(第二種配置需要額外引入兩個包:commons-dbcp、commons-pool)

?

<!-- 1、第一種配置SessionFactory的方式 -->

<beanid="sessionFactory"

????class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

????<propertyname="configLocation"value="classpath:hibernate.cfg.xml"/>

</bean>

?

<!-- 2、第二種配置SessionFactory的方式 -->

<!-- 2.1配置數(shù)據(jù)源 -->

<beanid="dataSource"class="org.apache.commons.dbcp.BasicDataSource"

????destroy-method="close">

????<propertyname="driverClassName"value="com.mysql.jdbc.Driver"></property>

????<propertyname="url"value="jdbc:mysql://localhost:3306/hibernate_cache"></property>

????<propertyname="username"value="root"></property>

????<propertyname="password"value="admin"></property>

</bean>

<!-- 2.2、配置SessionFactory -->

<beanid="sessionFactory"

????class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

????<propertyname="dataSource"ref="dataSource"></property>

????<propertyname="hibernateProperties">

????????<props>

????????????<propkey="hibernate.hbm2ddl.auto">update</prop>

????????</props>

????</property>

????<propertyname="mappingLocations">

????????<list>

????????????<value>classpath:實(shí)體對應(yīng)xml的路徑</value>

????????</list>

????</property>

</bean>

?

? ? ? ? ?至此Hibernate就成功的將SessionFactory交給了Spring來管理。現(xiàn)在再來看Spring是怎樣管理Hibernate事務(wù)的吧。

?

? ? ? ? ?第一種方式,利用tx標(biāo)簽配置事務(wù)。

?

<!-- 配置事務(wù)容器 -->

<beanid="transactionManager"

????class="org.springframework.orm.hibernate3.HibernateTransactionManager">

????<propertyname="sessionFactory"ref="sessionFactory"/>

</bean>

<!-- 定義事務(wù)規(guī)則 -->

<tx:adviceid="txAdvice"transaction-manager="transactionManager">

????<tx:attributes>

????????<tx:methodname="add*"propagation="REQUIRED"/>

????????<tx:methodname="modify*"propagation="REQUIRED"/>

????????<tx:methodname="del*"propagation="REQUIRED"/>

????????<tx:methodname="*"propagation="REQUIRED"read-only="true"/>

????</tx:attributes>

</tx:advice>

<!-- 定義事務(wù)入口 -->

<aop:config>

????<aop:pointcutid="allDaoMethod"expression="execution(* com.jianxin.dao.*.*(..))" ?/>

????<aop:advisoradvice-ref="txAdvice"pointcut-ref="allDaoMethod"/>

</aop:config>

?

? ? ? ? ?第二種,用代理進(jìn)行配置

?

<!-- 配置事務(wù)容器 -->

<beanid="transactionManager"

????class="org.springframework.orm.hibernate3.HibernateTransactionManager">

????<propertyname="sessionFactory"ref="sessionFactory"/>

</bean>

<!-- 定義事務(wù)規(guī)則 -->

<beanid="transactionProxy"

????class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"

????abstract="true">

????<propertyname="transactionManager"ref="transactionManager"/>

????<propertyname="transactionAttributes">

????????<props>

????????????<!-- ,回滾為-,不回滾為+ -->

????????????<propkey="add*">PROPAGATION_REQUIRED,-Exception</prop>

????????????<propkey="modify*">PROPAGATION_REQUIRED,+MyException</prop>

????????????<propkey="del*">PROPAGATION_REQUIRED</prop>

????????????<propkey="*">READONLY</prop>

????????</props>

????</property>

</bean>

<!-- 定義事務(wù)入口 -->

<beanid="userDaoProxy"parent="transactionProxy">

????<propertyname="target"ref="userDao"></property>

</bean>

?

? ? ? ? 第三種,利用攔截器

?

<!-- 配置事務(wù)容器 -->

<beanid="transactionManager"

????class="org.springframework.orm.hibernate3.HibernateTransactionManager">

????<propertyname="sessionFactory"ref="sessionFactory"/>

</bean>

<!-- 定義事務(wù)規(guī)則 -->

<beanid="transactionInterceptor"

????class="org.springframework.transaction.interceptor.TransactionInterceptor">

????<propertyname="transactionManager"ref="transactionManager"/>

????<propertyname="transactionAttributes">

????????<props>

????????????<!-- 回滾為-,不回滾為+ -->

????????????<propkey="add*">PROPAGATION_REQUIRED,-Exception</prop>

????????????<propkey="modify*">PROPAGATION_REQUIRED,+MyException</prop>

????????????<propkey="del*">PROPAGATION_REQUIRED</prop>

????????????<propkey="*">READONLY</prop>

????????</props>

????</property>

</bean>

<!-- 定義事務(wù)入口 -->

<beanid="proxyFactory"

????class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">

????<propertyname="interceptorNames">

????????<list>

????????????<value>transactionInterceptor</value>

????????</list>

????</property>

????<propertyname="beanNames">

????????<list>

????????????<value>*Dao</value>

????????</list>

????</property>

? ? <!--使用接口時-->

? ? <property name="proxyTargetClass">
<value>true</value>
? ? </property>

</bean>

?

? ? ? ? ?第四種,利用注解。

?

<!-- 開戶事務(wù)注解功能 -->

<tx:annotation-driventransaction-manager="transactionManager"/>

?

?

? ? ? ? ?首先,在配置文件中寫入下面語句,打開注解功能

? ? ? ? ?然后用@Transactional對類或者方法進(jìn)行標(biāo)記,如果標(biāo)記到類上,那么次類中所有方法都進(jìn)行事務(wù)回滾處理,在類中定義Transactional的時候,它有propagation、rollbackFor、noRollbackFor等屬性,此屬性是用來定義事務(wù)規(guī)則,而定義到哪這個就是事務(wù)入口。

?

? ? ? ? ?縱觀以上四種在Spring中配置Hibernate事務(wù)的方法,其核心都是一樣的,不同的只是實(shí)現(xiàn)的方式而已。所以看到這,這篇博文中你只需要記住4句話,就可以輕松理解在Spring中配置Hibernate事務(wù)的核心:

?

? ? ? ? ?1.配置SessionFactory

? ? ? ???2.配置事務(wù)容器

? ? ? ???3.配置事務(wù)規(guī)則

? ? ? ???4.配置事務(wù)入口

轉(zhuǎn)載于:https://my.oschina.net/dreamerliujack/blog/847737

總結(jié)

以上是生活随笔為你收集整理的Spring中配置Hibernate事务的四种方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。