zoukankan      html  css  js  c++  java
  • 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为事务管理,如果其中一条插入失败就回滚。 

  • 相关阅读:
    zabbix(x)
    kvm 学习(三)存储池
    kvm 学习(二)镜像
    hadoop3.1.1:找不到或无法加载主类 org.apache.hadoop.mapreduce.v2.app.MRAppMaster
    (转)mysql更改数据目录
    (转)SLOW READPROCESSOR;ERROR SLOW BLOCKRECEIVER错误日志分析
    Linux下 为什么有时候使用sudo也提示没有权限
    (转)hadoop 常规错误问题(一)
    (转)SmartPing:一个服务器Ping值监测工具
    (转)hadoop 配置文件解释
  • 原文地址:https://www.cnblogs.com/andyboy/p/3437871.html
Copyright © 2011-2022 走看看