spring 事务管理(编程式)

本文内容纲要:spring 事务管理(编程式)

spring事务管理(编程式)

1、关键抽象类:

Java代码

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代表了一个新的事务发起或者已经存在的事务,可以通过它来控制事务的执行和调查的状态。

Java代码

package org.springframework.transaction;

public interface TransactionStatus extends SavepointManager {

boolean isNewTransaction();

boolean hasSavepoint();

void setRollbackOnly();

boolean isRollbackOnly();

boolean isCompleted();

}

spring提供编程式事务管理和声明式事务管理。

编程式事务管理可以实现细粒度的事务管理。spring提供两种方式,一种为PlatformTransactionManager,另一种为TransactionTemplate。

先使用PlatformTransactionManager实现。

Java代码

package cn.com.gan.spring.database;

public interface IUserDao {

public void insert(User user);

public User find(String name);

}

Java代码

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为事务管理,如果其中一条插入失败就回滚。

本文内容总结:spring 事务管理(编程式)

原文链接:https://www.cnblogs.com/andyboy/p/3437871.html

以上是 spring 事务管理(编程式) 的全部内容, 来源链接: utcz.com/z/362790.html

回到顶部