Spring的编程式事务处理, 推荐使用TransactionTemplate类来管理编程式事务, 这个类有两种回调:

  • TransactionCallbackWithoutResult —— 执行事务没有返回值,例如save、update、delete等等; 
  • TransactionCallback —— 执行事务处理后有返回值,如find要返回结果集(List); 
spring的配置

 

<!-- dataSource -->
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
		<!-- Connection Info -->
		<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
		<property name="url" value="jdbc:oracle:thin:@192.168.26.188:1521:xxx" />
		<property name="username" value="xx" />
		<property name="password" value="xx" />

		<!-- Connection Pooling Info -->
		<property name="initialSize" value="3" />
		<property name="maxActive" value="5" />
		<property name="maxIdle" value="30" />
		<property name="maxWait" value="1000" />
		<property name="poolPreparedStatements" value="true" />
		<property name="defaultAutoCommit" value="true" />			
	</bean>

	<bean id="dataSourceTransactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<constructor-arg ref="dataSource" />
	</bean>	

	<bean id="transactionTemplate"
		class="org.springframework.transaction.support.TransactionTemplate">
		<constructor-arg ref="dataSourceTransactionManager" />
	</bean>

 

java代码sample:

 

public void createPerson(final Person person) {
   transactionTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
   transactionTemplate.execute(new TransactionCallbackWithoutResult(){    // 使用无返回值的事务回调接口
    @Override
    protected void doInTransactionWithoutResult(TransactionStatus arg0) {
     getHibernateTemplate().save(person);    
    }   
   });
}

public Person queryOnePerson(final String hql) {
   transactionTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
   return (Person)transactionTemplate.execute(new TransactionCallback(){     // 使用带返回值的事务回调接口

    public Object doInTransaction(TransactionStatus arg0) {
     return getHibernateTemplate().find(hql).get(0);
    }   
   });
}

 

上面的例子演示了如何使用编程式事务管理hibernate的查询和插入操作.

posted on 2010-09-27 23:11  菊次郎  阅读(816)  评论(0编辑  收藏  举报