【孙哥说Spring5】第三章 Spring的事务处理

  1. 什么是事务?
java 复制代码
保证业务操作完整性的一种数据库机制

事务的4大特点:A C I D
1. A 原子性
2. C 一致性
3. I 隔离性
4. D 持久性
  1. 如何控制事务
java 复制代码
JDBC:
	Connection.setAutoCommit(false);
	Connection.commit();
	Connection.rollback();
MyBatis:
	MyBatis自动开启事务
	
	sqlSession(Connection).commit();
	sqlSession(Connection).rollback();

结论:控制事务的底层,都是Connection对象完成的
  1. Spring控制事务的开发
java 复制代码
Spring是通过AOP的方式进行事务开发

(1)原始对象

java 复制代码
public class XXXUserServiceImpl{
	private xxxDAO xxxDAO;
	set get
	
	1. 原始对象 ---》 原始方法 ---》 核心功能(业务处理+DAO调用)
	2. DAO作为Service的成员变量,依赖注入的方式进行赋值
}

(2)额外功能

java 复制代码
1. org.springframework.jdbc.datasource.DataSourceTranscationManager
2. 注入DataSource

# 事务底层实现两种方式
1. MethodInterceptor
   public Object invoke(MethodInvocation invocation){
   		try{
			Connection.setAutoCommit(false);
			Object ret = invocation.proceed();
			Connection.commit();
		}catch(){
			Connection.rollback();
		}
		return ret;
	}
2. @Aspect
   @Around

(3)切入点

java 复制代码
@Transactional
事务的额外功能加入给那些业务方法

1. 类上:类中所有的方法都会加入事务
2. 方法上:这个方法会加入事务

(4)组装切面

java 复制代码
1. 切入点
2. 额外功能

<tx:annotation-driven transaction-manager=""/>
  1. Spring控制事务的编码

(1)搭建开发环境

java 复制代码
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>5.1.14.RELEASE</version>
</dependency>

(2)编码

java 复制代码
# 原始对象
<bean id="userService" class="com.baizhiedu.service.UserServiceImpl">
	<property name="userDAO" ref="userDAO"/>
</bean>

# 额外功能(事务)
<bean id="dataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTranscationManager">
	<property name="dataSource" ref="dataSource"/>
</bean>

# 切入点
@Transcational
public class UserServiceImpl implements UserService {
	private UserDAO userDAO;
}

# 组装切面
<tx:annotation-driven transaction-manager="dataSourceTransactionManager"/>

(3)细节

java 复制代码
<tx:annotation-driven transaction-manager="dataSourceTransactionManager" proxy-target-class="true"/>
进行动态代理底层实现的切换	proxy-target-class
	默认:false	JDK动态代理
		 true	CGLIB动态代理
相关推荐
fundoit2 小时前
为什么需要 Access Token 和 ID Token 两个令牌
java·spring·架构·github·oauth2
鱼宵3 小时前
Spring AI 流式输出:Flux + SSE 打字机,回答不再干等三秒
java·人工智能·spring·sse·springai·流式输出
小鹿的周先生4 小时前
第19章-Agent
java·spring·ai
步行cgn5 小时前
MySQL 报错:Access denied for user ‘root‘@‘localhost‘ 详解
java·数据库·spring
鱼宵6 小时前
Spring AI 生产化改造:记忆落 Redis、向量落 ES,重启再也不丢
人工智能·redis·spring·elasticsearch·springai
Wang's Blog6 小时前
Java框架 SpringCloud 快速入门: Nacos 配置热更新
java·spring·spring cloud
天空鸟_时光不老7 小时前
06-给AI流程加一道人工闸门
java·人工智能·spring boot·后端·spring·spring cloud·架构
阿俊-全栈开发8 小时前
LikeShop单商户Java商城如何从容承接高并发流量?
java·开发语言·spring boot·spring·系统架构
天空鸟_时光不老8 小时前
01-我不转Python把AI塞进Java里
java·人工智能·spring boot·后端·spring·spring cloud·架构
桃西西呀8 小时前
Spring AI Alibaba 之四:拆开 ReactAgent 的图,看 ReAct 循环怎么拼出来
人工智能·spring·llm