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

  • 相关阅读:
    myeclipse中无自动提示
    ueditor使用方法
    微软开发中心的rss历史记录(10)
    微软开发中心的rss历史记录(9)
    微软开发中心的rss历史记录(6)
    微软开发中心的rss历史记录(7)
    微软开发中心的rss历史记录(8)
    P4学习:统计功能
    openCL信息汇总
    GPU/CUDA程序初体验 向量加法
  • 原文地址:https://www.cnblogs.com/andyboy/p/3437871.html
Copyright © 2011-2022 走看看