spring3事务之声明方式

spring的事务管理可以编码,也可声明!推荐声明!

1、添加spring、hibernate支持

myeclipse9.0直接支持spring3.0和hibernate3.3

2、创建spring装配文件(applicationContext.xml)

下图勾选bean 、aop、tx三项。

3、配置内容:

1)装配数据源和工厂

<bean id="dataSource"
		class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName"
			value="com.mysql.jdbc.Driver">
		</property>
		<property name="url" value="jdbc:mysql://localhost/newsdb?characterEncoding=utf8"></property>
		<property name="username" value="root"></property>
		<property name="password" value="123456"></property>
	</bean>
	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="dataSource">
			<ref bean="dataSource" />
		</property>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">
					org.hibernate.dialect.MySQLDialect
				</prop>
				<prop key="show_sql">true</prop>
			</props>
		</property>
		<property name="mappingResources">
			<list>
				<value>mapping.xml</value>
			</list>
		</property>
	</bean>
2)装配事务管理

<!-- 配置事务管理器 -->

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
   <property name="sessionFactory">
       <ref bean="sessionFactory"/>
   </property>
</bean>
3)装配事务属性

<!--  配置事务传播特性 -->
<tx:advice id="TestAdvice" transaction-manager="transactionManager">
    <tx:attributes>
      <tx:method name="add*" propagation="REQUIRED"/>
      <tx:method name="del*" propagation="REQUIRED"/>
      <tx:method name="update*" propagation="REQUIRED"/>
      <tx:method name="add*" propagation="REQUIRED"/>
      <tx:method name="find*" propagation="REQUIRED"/>
      <tx:method name="get*" propagation="REQUIRED"/>
      <tx:method name="apply*" propagation="REQUIRED"/>
    </tx:attributes>
</tx:advice>

4)确定切面,需要使用事务的bean

<!--  配置参与事务的类 -->
<aop:config>
<aop:pointcut id="allTestServiceMethod" expression="execution(* manager.*.*(..))"/>
<aop:advisor pointcut-ref="allTestServiceMethod" advice-ref="TestAdvice" />
</aop:config>
5)常规bean可以配到另外的装配文件中

<bean id="bookManager" class="manager.BookManager" >
		<property name="hibernateTemplate">
			<ref bean="hibernateTemplate" />
		</property>
</bean>
如果bean中不使用hibernateTemplate,可以不注入此对象
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate" >
	<property name="sessionFactory">
		<ref local="sessionFactory" />
	</property>
</bean>

4、测试对象

业务实体 BookManager.java
public class BookManager implements BookManagerInterface{
	private Book book;
	private Address addrss;
	private HibernateTemplate hibernateTemplate;
	
	public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
		this.hibernateTemplate = hibernateTemplate;
	}
	public void addBook(Book b,Address a){
		hibernateTemplate.save(b);
		Integer.parseInt("d");
		hibernateTemplate.save(a);
	}
}
测试类 TestBookManager .java
public class TestBookManager {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String cfg[]=new String[]{"src\\hibernateSpring.xml",
				"src\\commonbean.xml"
				};
		ApplicationContext ac =new FileSystemXmlApplicationContext(cfg);
		BookManagerInterface bmi=(BookManagerInterface) ac.getBean("bookManager");
		System.out.println(bmi.getClass().getName());
		Book b =new Book();
		b.setName("spring aop");
		Address a =new Address();
		a.setCity("天津");
		bmi.addBook(b, a);
	}
}

5、事务的传递性说明

PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择,没特殊性需求,这个足矣

PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。

PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。

PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。

PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。

PROPAGATION_NESTED--如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值