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为事务管理,如果其中一条插入失败就回滚。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值