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为事务管理,如果其中一条插入失败就回滚。
分享到:
相关推荐
Spring 的事务管理是 Spring 框架中一个比较重要的知识点,该知识点本身并不复杂,只是由于其比较灵活,导致初学者很难把握。本教程从基础知识开始,详细分析了 Spring 事务管理的使用方法,为读者理清思路。
本代码使用H2内存数据库演示spring事务使用,包括编程式事务,声明式事务@Transactional使用,自定义事务事务注解实现自定义事务管理器
全面分析_Spring_的编程式事务管理及声明式事务管理,本教程假定您已经掌握了 Java 基础知识,并对 Spring 有一定了解。您还需要具备基本的事务管理的知识,比如:事务的定义,隔离级别的概念,等等。本文将直接使用...
全面分析_Spring_的编程式事务管理及声明式事务管理.
Spring 声明式事务和Spring 编程式事务
演示了spring编程式事务的实现,通过TransactionTemplate模板进行事务控制
spring编程式事务与声明式事务详解,超详细!
NULL 博文链接:https://konglx.iteye.com/blog/1836826
Spring事务管理.pdf 1.资料 2.本地事务与分布式事务 3.编程式模型 4.宣告式模型
Spring为了简化事务管理的代码:提供了模板类 TransactionTemplate,所以手动编程的方式来管理事务,只需要使用该模板类即可
Spring事务管理 编程式和声明式
Java高级编程 实验报告 spring 声明事务 实验目的 掌握spring 声明式事务管理配置 实验环境 本实验采用本实验采用的eclipse或者 Myeclpse开发工具。Spring 4.0以上 Jdk1.7以上、oracle/mysql。
全面分析Spring的编程式事务管理与声明式事务管理.doc
spring事务管理几种方式代码实例:涉及编程式事务,声明式事务之拦截器代理方式、AOP切面通知方式、AspectJ注解方式,通过不同方式实例代码展现,总结spring事务管理的一般规律,从宏观上加深理解spring事务管理特性...
spring编程式和声明式事务管理,事务放在dao,存演示版本!懂!
跟我学Spring3(9.3)Spring的事务之编程式事务Java开发Java经验技巧共34页.pdf.zip
们可以按照统一的编程模型来进行事务编程,却不用关心所使用的数据访问技术以及具体要访问什么 类型的事务资源。并且,Spring的事务框架与Spring提供的数据访问支持可以紧密结合,更是让我们在 事务管理与数据访问...
NULL 博文链接:https://quicker.iteye.com/blog/674029
本篇文章主要介绍了详解Spring学习之编程式事务管理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧