`
白色熊猫
  • 浏览: 16732 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

spring事务管理(编程式)

阅读更多
1、关键抽象类:
package org.springframework.transaction;
public interface PlatformTransactionManager {
	TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException;
	void commit(TransactionStatus status) throws TransactionException;
	void rollback(TransactionStatus status) throws TransactionException;
}

TransactionDefinition定义了事务的隔离成都,传播行为,超时,只读等属性,TransactionStatus代表了一个新的事务发起或者已经存在的事务,可以通过它来控制事务的执行和调查的状态。
package org.springframework.transaction;
public interface TransactionStatus extends SavepointManager {

	boolean isNewTransaction();

	boolean hasSavepoint();
	
	void setRollbackOnly();

	boolean isRollbackOnly();

	boolean isCompleted();

}


spring提供编程式事务管理和声明式事务管理。
编程式事务管理可以实现细粒度的事务管理。spring提供两种方式,一种为PlatformTransactionManager,另一种为TransactionTemplate。
先使用PlatformTransactionManager实现。
package cn.com.gan.spring.database;

public interface IUserDao {
public void insert(User user);
public User find(String name);
}


package cn.com.gan.spring.database;

import java.util.List;
import java.util.Map;

import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;

import javax.sql.DataSource;

public class UserDao implements IUserDao {
	// private DataSource dataSource;
	private JdbcTemplate jdbcTemplate;
    private PlatformTransactionManager tm;
    private DefaultTransactionDefinition df;
	public void setDataSource(DataSource dataSource) {
		jdbcTemplate = new JdbcTemplate(dataSource);
		tm=new DataSourceTransactionManager(dataSource);
		df=new DefaultTransactionDefinition();
		df.setPropagationBehavior(DefaultTransactionDefinition.PROPAGATION_REQUIRED);
	}
	@Override
	public User find(String name) {
		List<Map> list = jdbcTemplate
				.queryForList("select * from user where name='" + name + "'");
		User user = null;
		for (Map map : list) {
			user = new User();	
			user.setName(map.get("name").toString());
			user.setAge(Short.parseShort(map.get("age").toString()));
		}
		return user;
	}
	@Override
	public void insert(User user) {
		TransactionStatus ts=tm.getTransaction(df);
		try{
	    jdbcTemplate.update("insert into user(name,age) values(?,?)",
				new Object[] { user.getName(), user.getAge() });
	    jdbcTemplate.update("insert into user(name,age) values(?,?)",
				new Object[] { user.getName(), user.getAge() });
		}catch(DataAccessException e){
			tm.rollback(ts);
			e.printStackTrace();
		}
	    tm.commit(ts);
	}
}

其中insert为事务管理,如果其中一条插入失败就回滚。


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics