您的位置:首页 > 编程语言 > Java开发

Spring的事务管理机制

2012-06-26 15:32 507 查看
    事务就是对一系列的数据库操作(比如插入多条数据)进行统一的提交或回滚操作,如果插入成功,那么一起成功,如果中间有一条出现异常,那么回滚之前的所有操作。这样可以防止出现脏数据,防止数据库数据出现问题。开发中为了避免这种情况一般都会进行事务管理。

在JDBC中是通过Connection对象进行事务管理的,默认是自动提交事务,可以手工将自动提交关闭,通过commit方法进行提交,rollback方法进行回滚,如果不提交,则数据不会真正的插入到数据库中。

Hibernate中是通过Transaction进行事务管理,处理方法与JDBC中类似,是在DAO层进行事务管理的。

Spring中也有自己的事务管理机制,一般是使用TransactionMananger进行管理,可以通过Spring的注入来完成此功能。

所以在SSH中,我们一般用Hibernate的事务管理方式也可以选择用Spring来进行事务管理。但是我个人认为,从逻辑上来讲,用Spring管理模式会更加好,在Service层,我们每一个业务其实才是真正的一个事务,里面可能调用多个Dao类,对多个数据库多种操作同时进行,那么在这里进行事务管理就表示,要成功大家一起成功,失败大家一起失败。更符合我们认为的AOP编程的思想。

 

spring配置文件的写法

<!-- Transaction Manager -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>

<!--  Base Transaction Proxy -->
<bean id="baseTxProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true">
<property name="transactionManager">
<ref local="transactionManager"/>
</property>
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED</prop>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>


 

service的写法

<!-- Service 的管理 -->
<bean id="loginoutService"  parent="baseTxProxy">
<property name="target">
<bean class="org.hstaoshu.service.LoginoutService">
<property name="loginoutDAO" ref="loginoutDAO" />
<property name="adminDAO" ref="adminDAO" />
</bean>
</property>
</bean>


 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息