当前位置: 首页 > article >正文

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

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

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

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

(1)原始对象

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

(2)额外功能

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)切入点

@Transactional
事务的额外功能加入给那些业务方法

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

(4)组装切面

1. 切入点
2. 额外功能

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

(1)搭建开发环境

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>5.1.14.RELEASE</version>
</dependency>

(2)编码

# 原始对象
<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)细节

<tx:annotation-driven transaction-manager="dataSourceTransactionManager" proxy-target-class="true"/>
进行动态代理底层实现的切换	proxy-target-class
	默认:false	JDK动态代理
		 true	CGLIB动态代理

http://www.kler.cn/a/108151.html

相关文章:

  • 【学习】Fine-tuning知识汇总
  • vue3+element-plus==> el-form输入响应式失效踩坑!!!!!!!!!!
  • 并发基础:(淘宝笔试题)三个线程分别打印 A,B,C,要求这三个线程一起运行,打印 n 次,输出形如“ABCABCABC....”的字符串【举一反三】
  • 尽量通俗易懂地概述.Net U nity跨语言/跨平台相关知识
  • 深度学习——权重初始化、评估指标、梯度消失和梯度爆炸
  • Gsensor加速度传感器数据异常及概率性卡死
  • 图解Kafka高性能之谜(五)
  • 【计算机网络笔记】DNS报文格式
  • 日常软件游戏丢失msvcp120dll怎么修复?分享5个修复方法
  • Python---使用turtle模块+for循环绘制五角星---利用turtle(海龟)模块
  • 解决国外镜像无法访问导致的R包无法安装问题
  • HDU 1062:字符串反转
  • 面向对象设计模式——命令模式
  • 17、简单记录一下两个流媒体工具和推流测试
  • springboot配置https
  • 用于读取验证码的 OCR 模型
  • 设计模式:桥接模式(C#、JAVA、JavaScript、C++、Python、Go、PHP)
  • vue中父组件给子组件传递了参数后,什么时候确保子组件中收到的参数更新了
  • 创新领航 | 竹云参编《基于区块链的数据资产评估实施指南》正式发布!
  • 【Python机器学习】零基础掌握MissingIndicator缺失值填充
  • Node.js的基本概念node -v 和npm -v 这两个命令的作用
  • 华为数通方向HCIP-DataCom H12-831题库(多选题:101-120)
  • 2016年下半年上午易错题(软件设计师考试)
  • [100天算法】-连通网络的操作次数(day 46)
  • LVS-DR模式+keepalived+nginx+tomcat实现动静分离、负载均衡、高可用实验
  • 方舟生存进化ARK个人服务器搭建教程保姆级