Spring的事务处理的方法

Spring的事务处理的方法

一)编程式事务处理

1 、使用TransactionTemplate进行事务处理(Spring进行commitrollback

1 )使用事务处理的类

import javax.sql.DataSource;

import org.springframework.jdbc.core.*;

import org.springframework.transaction.*;

import org.springframework.dao.*;

public class bookDAO{

private DataSource dataSource;// 依赖注入 dataSource ,管理数据库

private PlatformTransationManager transactionManager;// 依赖注入管理事务

public void setDataSource(DataSource dataSource){

this.dataSource=dataSource;

}

public void setTransactionManager(PlatformTransationManager transactionManager){

this. transactionManager= transactionManager;

}

public int create(String msg){

TransactionTemplate transactionTemplate=new TransactionTemplate(transactionManager);

// 调用 transactionTemplate execute 方法进行事务管理

Object result= transactionTemplate.execute (

// 这是一个回调函数,实现了 TransactionCallback 接口的 doInTransaction 方法,就是在这个方法里写数据库新增数据的操作

new TransactionCallback()

{

public Object doInTransaction(TransactionStatus status)

{

// 数据库操作代码

return resultObject;

}

}

[U1] )

}

}

如果不想返回结果( resultObject ),则可以用 TransactionCallbackWithoutResult 来实现 TransactionCallback 接口,代码如下:

new TransactionCallback WithoutResult ()

{

public Object doInTransaction WithoutResult (TransactionStatus status)

{

// 数据库操作代码

}

}

2 )配置文件

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"

"http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

<!— dataSource à

<bean id=”dataSource” class=”org.springframework.jdbc.datasource.DriverManagerDataSource”>

<!— 使用SQL Server à

<property name=”driverClassName”>

<value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>

</property>

<property name=”url”>

<value>jdbc:Microsoft:sqlserver://localhost:1433/stdb</value>

</property>

<property name=”name”>

<value>admin</value>

</property>

<property name=”msg”>

<value>admin</value>

</property>

</bean>

<!— 设定 transactionManager à

<bean id=”transactionManager”

class=”org.springframework.jdbc.datasource.DataSourceTransactionManager”>

<property name=”dataSource”>

<ref bean=”dataSource”/>

</property>

</bean>

<!— 示例中 DAO-->

<bean id=”bookDAO” class=”com.bookDAO”>

<property name=”dataSource”>

<ref bean=”dataSource”/>

</property>

<property name=”transactionManager”>

<ref bean=”transactionManager”>

</property>

</bean>

</beans>

这样 Spring 就可以自动进行 commit rollback 这两个操作了。粉色部分是为了和 bookDAO 中的粉色部分相匹配。

2 、使用JdbcTemplate进行事务处理(硬编码进行commitrollback

1 )使用事务处理的类

import javax.sql.DataSource;

import org.springframework.jdbc.core.*;

import org.springframework.transaction.*;

import org.springframework.dao.*;

public class bookDAO{

private DataSource dataSource;// 依赖注入 dataSource ,管理数据库

private PlatformTransationManager transactionManager;// 依赖注入管理事务

public void setDataSource(DataSource dataSource){

this.dataSource=dataSource;

}

public void setTransactionManager(PlatformTransationManager transactionManager){

this. transactionManager= transactionManager;

}

public int create(String msg){

/* TransactionTemplate transactionTemplate=new TransactionTemplate(transactionManager);

Object result= transactionTemplate.execute (

new TransactionCallback()

{

public Object doInTransaction(TransactionStatus status)

{

return resultObject;

}

}

)*/

// 使用下面的代码替换上面注释掉的部分

DefaultTransactionDefinition def =new DefaultTransactionDefinition();

TransactionStatus status=transactionManager.getTransaction(def);

try

{

JdbcTemplate jdbcTemplate=new JdbcTemplate(dataSource);

jdbcTemplate.update(“INSERT INTO book VALUES(1,’gf’,’Mastering Spring’)”);

}

catch(DataAccessException ex)

{

transactionzManager.rollback(status);

thr