spring中如何做事务?(标准做法---集成hibernate)

spring中如何做事务?(标准做法---集成hibernate)
配置如下:

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" >
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
</bean>

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager" >
<property name="sessionFactory" ref="sessionFactory" />
</bean>

<tx:advice id="txAdivce" transaction-manager="transactionManager" >
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="del*" propagation="REQUIRED" />
<tx:method name="*" read-only="true" />
</tx:attributes>
</tx:advice>

<aop:config>
<aop:pointcut id="allDao" expression="execution(* com.cs.dao.*.*(..))" />
<aop:advisor advice-ref="txAdivce" pointcut-ref="allDao" />
</aop:config>

bean的配置
<bean id="teamDao" class="com.cs.dao.TeamDaoImpl">
<property name="sessionFactory" ref="sessionFactory" /> //必须要配上,因为继承自hibernateDaoSupport
</bean>
解析:
spring和hibernate的集成
1:把hibernate的sessionFactory纳入spring的管理
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" >
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
</bean>

2:配置好spring给我们提供的事物管理器
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager" >
<property name="sessionFactory" ref="sessionFactory" />
</bean>

3:配置事务的特性

<tx:advice id="txAdivce" transaction-manager="transactionManager" >
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="del*" propagation="REQUIRED" />
<tx:method name="*" read-only="true" />
</tx:attributes>
</tx:advice>

4:配置aop

<aop:config>
<aop:pointcut id="allDao" expression="execution(* com.cs.dao.*.*(..))" />
<aop:advisor advice-ref="txAdivce" pointcut-ref="allDao" />
</aop:config>


5:Dao类的编写
继承自HIbernateDaoSupport,调用其中的getHibernateTemplate完成数据库操作,所以需要在
Dao的类中配置sessionFactory

6:
public class PersonDaoImpl extends HibernateDaoSupport implements PersonDao {
private TeamDao teamDao ;

public void addPerson(Person p) { //在这里不用再去考虑事务的开启和关闭以及传播(这就是spring中作事务的优点所在)
this.getHibernateTemplate().saveOrUpdate(p) ;
teamDao.addTeam(p.getTeam()) ;
}

public TeamDao getTeamDao() {
return teamDao;
}

public void setTeamDao(TeamDao teamDao) {
this.teamDao = teamDao;
}

}

总结:(以上配置做事务处理非常实用,既不要自己写sessionFactory,也不需要写与数据库之间操作的模板,只需配置即可,而且只需配制一次)

propagation="REQUIRED"
事务的传播特性:
1:REQUIRED:如果当前的环境中存在着一个开启了的事务,就使用当前的事务,否则开启新的事务
2:SUPPORTS:如果当前的环境中存在着一个开启了的事务,就使用当前的事务,否则非事务的执行
3:MANDATARY:如果当前的环境中存在着一个开启了的事务,就使用当前的事务,否则抛出异常
4:REQUIRES_NEW:不管当前环境是不是存在事务,总是开启新的事务
5:NOT_SUPPORTS:始终保持非事务的执行
6:NEVER:始终保持非事务的执行,如果当前存在事务,抛出异常
7:NEST:如果当前存在一个活动的事务,则运行在一个嵌套事务中,如果没有则按REQUIRED的方式执行

isolation="READ_COMMITTED"
事务的隔离级别:
1:READ_UNCOMMITED:当前事务没有提交的数据也可以被其他的事务读取到
2:READ_COMMITED:当前事务的数据必须要提交才能让其他事务读到(默认情况)
3:REPEARED_READ:当前事务的add数据必须要提交才能让其他事务读到 ,而update数据读不到
4:SERIALIZABLE:不并发,所有的事务都必须是串行运行
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值