声明式事务

1、回顾事务

把一组业务当成一个业务来做;要么都成功,要么都失败!

事务在项目开发中,十分重要,涉及到数据的一致性问题,不能马虎!

确保完整性和一致性;

事务ACID原则:

1、原子性

2、一致性

3、隔离性

    多个业务可能同时操作同个资源,防止数据损坏

4、持久性

   事务一旦提交,无论系统发生什么问题,结果都不会再被影响,被持久化的写到存储器中!

2、Spring中的事务管理

(事务管理主要是为了避免多个事务同时执行时,有的事务执行失败,然而其它事务依旧执行成功,现在要做的就是当有事务失败时,所有事务回滚。)

 (1)、 声明式事务:AOP

(2)、编程式事务:需要在代码中,进行事务的管理

2.1声明式事务

1、接口

public interface UserMapper {
    public List selectUser();

    //添加一个用户
    public int addUser(User user);
    //删除一个用户
    public int deleteUser(int id);
}

2、UserMapper.xml






    

    
        insert into mybatis.user (id,name,pwd) values (#{id},#{name},#{pwd});
    

    
        delete from mybatis.user where id=#{id}
    


3、spring-dao.xml


xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx.xsd">


    
        
        
        
        
     


    
        

        
        
    

    

        
    


    
        
    


    
         
         
        
            
            
            
            
            
        
    

    
        
        
    

4、实现类

public class UserMapperImpl extends SqlSessionDaoSupport implements UserMapper {

    public List selectUser() {

        User user = new User(6, "小王", "223873");
        UserMapper mapper = getSqlSession().getMapper(UserMapper.class);
        mapper.addUser(user);
        mapper.deleteUser(4);

        return mapper.selectUser();
    }

    public int addUser(User user) {
        return getSqlSession().getMapper(UserMapper.class).addUser(user);
    }

    public int deleteUser(int id) {
        return getSqlSession().getMapper(UserMapper.class).deleteUser(id);
    }
}

5、applicationContext.xml




    

    
        
    

上述就可实现当多个事务其中有的事务出现问题,所有事务都不会成功执行

为什么要配置事务:

1、如果不配置事务,可能存在数据提交不一致的情况;

2、如果我们不在Spring中去配置声明事务,我们就需要在代码中手动配置事务

3、事务在项目的开发中十分重要,涉及到数据的一致性和完整性问题,不容马虎

Spring中七种Propagation类的事务属性详解:

1、REQUIRED:支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。  
2、SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行。  
3、MANDATORY:支持当前事务,如果当前没有事务,就抛出异常。  
4、REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起。  
5、NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。  
6、NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。  
7、NESTED:支持当前事务,如果当前事务存在,则执行一个嵌套事务,如果当前没有事务,就新建一个事务。
 

你可能感兴趣的:(声明式事务)