声明式事务


声明

本文为其他博主原创文章整合,仅用作个人学习,特此声明

参考文章链接

(3条消息) B站 - 狂神 - Spring5课堂笔记_夜里的雨的博客-CSDN博客_狂神spring5笔记

ACID参考文章:

13、声明式事务

  • 把一组业务当成一个业务来做;要么都成功,要么都失败!
  • 事务在项目开发中,十分的重要,涉及到数据的一致性问题
  • 确保完整性和一致性

事务的ACID原则:
1、原子性
2、隔离性
3、一致性
4、持久性

ACID参考文章:

Spring中的事务管理

  • 声明式事务:AOP
  • 编程式事务:需要在代码中,进行事务管理

声明式事务

先导入jar包



    
    
        org.springframework
        spring-webmvc
        5.2.7.RELEASE
    

    
        org.aspectj
        aspectjweaver
        1.9.4
    

    
    
        org.springframework
        spring-jdbc
        5.2.7.RELEASE
    

    
        org.mybatis
        mybatis
        3.5.2
    

    
        org.mybatis
        mybatis-spring
        2.0.4
    

    
        mysql
        mysql-connector-java
        8.0.12
    

    
        org.projectlombok
        lombok
        1.18.12
    


	




    
        src/main/java
        
            **/*.properties
            **/*.xml
        
        false
    
    
        src/main/resources
        
            **/*.properties
            **/*.xml
        
        false
    


代码步骤:

pojo实体类 User

package pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
	private int id;
	private String name;
	private String pwd;
}

mapper目录下的 UserMapper、UserMapperImpl、UserMapper.xml

接口UserMapper

package mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import pojo.User;

public interface UserMapper {
	public List getUser();
	
	public int insertUser(User user); 
	
	public int delUser(@Param("id") int id); 
}

UserMapperImpl

package mapper;

import pojo.User;
import org.apache.ibatis.session.SqlSession;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import java.util.List;

public class UserMapperImpl extends SqlSessionDaoSupport implements UserMapper {
    public List getUser() {
    	User user = new User(5,"你好","ok");
    	insertUser(user);
    	delUser(5);
        SqlSession sqlSession = getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        return mapper.getUser();
        //或者return  getSqlSession().getMapper(UserMapper.class).getUser();
    }
    //插入
	public int insertUser(User user) {
		return getSqlSession().getMapper(UserMapper.class).insertUser(user);
	}
	//删除
	public int delUser(int id) {
		return getSqlSession().getMapper(UserMapper.class).delUser(id);
	}
}

UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>

        


	
	
	
		insert into mybatis.mybatis (id,name,pwd) values (#{id},#{name},#{pwd})
	
	
    
	
		deleteAAAAA from mybatis.mybatis where id = #{id}
		
	


resource目录下的 mybatis-config.xml、spring-dao.xml、applicationContext.xml

mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>



	
	
	
		
	
	
	
	 
		
	


spring-dao.xml(已导入约束)

<?xml version="1.0" encoding="UTF-8"?>

		
	
	
		
		
		
		
	
	
	
    
        
        
        
        
    
	
	
    
        
    

    
    
    
        
        
        
            
            
            
            
            
        
    

    
    
        
        
    


applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>


	

	
		
	

测试类

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import mapper.UserMapper;import pojo.User;
public class MyTest7 {
	public static void main(String[] args) {

		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
		
		UserMapper userMapper = (UserMapper) context.getBean("userMapper");
		
		for (User user : userMapper.getUser()) {
			System.out.println(user);
		}
	}
}

思考:
为什么需要事务?

  • 如果不配置事务,可能存在数据提交不一致的情况下;
  • 如果不在spring中去配置声明式事务,我们就需要在代码中手动配置事务!
  • 事务在项目的开发中非常重要,涉及到数据的一致性和完整性问题!