怎么使用Annotation进行声明式事务管理

1 篇文章 0 订阅

前言:

Spring对于各种各样的ORM框架(包括JDBC) 都可以它进行声明式事务管理,以下讲

解的是Spring对Hibernate的声明式事务管理,也是用的最多的;

一.导入命名空间并注入SessionFactory

在spring配置文件中beans元素中:

   xmlns:tx="http://www.springframework.org/schema/tx"
   xsi:schemaLocation=”
   http://www.springframework.org/schema/tx 

2.注入SessionFactory;

二.配置Hibernate事务管理器

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

注意:

(1)使用HibernateTransactionManager类管理事务, 其实这个类就相当于一个
aspect(切面类),运用了AOP原理;
(2)这是作为公共使用的事务管理器Bean。这个会事先配置好,不需要各个模块各
自去配(也就是有多个spring配置文件时);

(3)HibernateTransactionManager这个类怎么管理事务呢?这里就使用了
SessionFactory,从SessionFactory中获取连接,所以这里需要需要注入一个
SessionFactory;

三. 增加Annotation驱动的Transaction管理:

<tx:annotation-driven transaction-manager=“transactionManager”/>

注意:transaction-manager属性需要指定一个TransactionManager(也就是事务管理器), 对于Hibernate的事务管理你需要指定Hibernate事务管理器;

四.关于@Transactional注解的使用:

前言:

(1)如果你需要在一个方法中增加事务,这时你就可以在这个方法上添加@Transactional

注解,它会自动在方法执行前与方法执行后添加关于事务的业务逻辑(也就是

@Transactional使用了AOP编程模式);

(2)在Spring默认情况下,如果捕捉到的或则抛出的是一个RuntimeException 会自 动回滚事务;

(3)其实Hibernate在运行期间抛出的异常均为RuntimeException

好处:

在Spring中对Hibernate进行事务管理,可以把我们的重点放在业务逻辑上,而 不必在关注try…catch…finally (发生异常时对事务的操作);

1.@Transactional注解的配置:

属性:
1)propagation:
在Spring为事务的传播性(也就是事务的产生过程), 默认值为
Propagation.REQUIRED;
类型:枚举类型Propagation;
Propagation枚举类型中共有5个取值:

2.事务的传播行为
1).requierd
如果有事务那么加入事务,没有的话新建一个

2).not_supported
不开启事务

3).requires_new
不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完,继续执行老事务

4).mandatory
必须在一个已有的事务中执行,否则抛出异常

5).never
必须在一个没有的事务中执行,否则抛出异常

6).supports
如果其他bean调用这个方法,在其他bean中声明事务,那就用事务.如果其他bean没有声明事务那就不用事务

3.readOnly:布尔类型
如果取值为true,就是只读型事务,也就是在该事务中没有insert、update、delete
操作;
如果取值为false,就是读写型事务,也就是在该事务中就能读又能写;
注意:该属性是做优化使用的;也防止我们在只读事务中,写了更改操作;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值