Spring的事务步骤

一、事务处理方案:

Spring框架中提供的事务处理方案:一共有两种: 

1.适合中小项目使用的, 注解方案:

        注解的方式做事务用起来简单,灵活,方便,中小型项目中用它比较方便,因为只需要@Transactional注解就OK了;这种方式用的就是spring框架自己提供的事务的处理机制,@Transactional注解的机制是AOP的环绕通知:在方法执行之前开启事务,方法执行之后回滚或者提交事务。@Transactional注解常见的属性包括:隔离级别、传播行为、超时时间以及回滚规则

2.使用 AspectJ 的 AOP 配置管理事务(掌握)

        在大型项目中如何做事务的:

        实现步骤: 都是在xml配置文件中实现。使用 XML 配置文件配置事务代理的方式的不足是,每个目标类都需要配置事务代理。当目标类较多,配置文件会变得非常臃肿。

        使用 XML 配置文件的方式可以自动为每个符合切入点表达式的类和方法生成事务代理,使用aspectj框架功能,在spring配置文件中声明类和方法需要的事务。这种方式的业务方法和事务配置完全分离的,业务代码就是业务代码,事务就是事务。 

二、总体思路: 

  1)你需要指定要使用的事务管理器实现类,使用<bean>

  2)需要指定哪些类,哪些方法需要加入事务的功能

  3)需要指定方法需要的隔离级别,传播行为,超时

<dependency> 
<groupId>junit</groupId> 
<artifactId>junit</artifactId> 
<version>4.11</version> 
<scope>test</scope> 
</dependency> <dependency> 
<groupId>org.springframework</groupId> 
<artifactId>spring-context</artifactId> 
<version>5.2.5.RELEASE</version> 
</dependency> <dependency> 
<groupId>org.springframework</groupId> 
<artifactId>spring-aspects</artifactId> 
<version>5.2.5.RELEASE</version>
</dependency><dependency>
<groupId>org.springframework</groupId> 
<artifactId>spring-tx</artifactId> 
<version>5.2.5.RELEASE</version> 
</dependency> <dependency> 
<groupId>org.springframework</groupId> 
<artifactId>spring-jdbc</artifactId> 
<version>5.2.5.RELEASE</version> 
</dependency> <dependency> 
<groupId>org.mybatis</groupId> 
<artifactId>mybatis</artifactId> 
<version>3.5.1</version> 
</dependency> <dependency> 
<groupId>org.mybatis</groupId> 
<artifactId>mybatis-spring</artifactId> 
<version>1.3.1</version> 
</dependency> <dependency> 
<groupId>mysql</groupId> 
<artifactId>mysql-connector-java</artifactId> 
<version>5.1.9</version> 
</dependency> <dependency> 
<groupId>com.alibaba</groupId> 
<artifactId>druid</artifactId> 
<version>1.1.12</version> 
</dependency> 插件 
<build> 
<resources> 
<resource> 
<directory>src/main/java</directory><!--所在的目录--> 
<includes><!--包括目录下的.properties,.xml 文件都会扫描到--> 
<include>**/*.properties</include> 
<include>**/*.xml</include> 
</includes> 
<filtering>false</filtering> 
</resource> 
</resources> <plugins> 
<plugin> 
<artifactId>maven-compiler-plugin</artifactId> 
<version>3.1</version> 
<configuration> 
<source>1.8</source> 
<target>1.8</target> 
</configuration> 
</plugin> 
</plugins> 
</build> 

spring框架中提供的事务处理方案:一共有两种: 

  1. 适合中小项目使用的, 注解方案:

        spring框架自己用aop实现给业务方法增加事务的功能, 使用@Transactional注解增加事务,@Transactional注解的机制是AOP的环绕通知:在方法执行之前开启事务,方法执行之后回滚或者提交事务:

  1.  @Transactional注解是spring框架自己的注解,放在public方法的上面,表示当前方法具有事务。可以给注解的属性赋值,表示具体的隔离级别,传播行为,超时时间,异常信息等等
  2.   @Transactional 若用在方法上,只能用于 public 方法上。对于其他非 public 方法,如果加上了注解@Transactional,虽然 Spring 不会报错,但不会将指定事务织入到该 方法中。因为 Spring 会忽略掉所有非 public 方法上的@Transaction 注解。
  3.   若@Transaction 注解在类上,则表示该类上所有的方法均将在执行时织入事务。

三、使用@Transactional的步骤:

  1.声明事务管理器对象

    在applicationContext.xml文件中声明事务管理器对象:

    <bean id="xx" class="DataSourceTransactionManager">  

  (因为你是用的事务管理器的mybatis实现类)

事务管理器提交事务,回滚事务,但是它必须得知道连接哪一个数据库,数据库的信息 :

  2.开启事务注解驱动:

         告诉spring框架,我要使用注解的方式管理事务。

3.在业务方法上面加入@Trancational

 rollbackFor:表示发生指定的异常时一定回滚

  1. Spring框架首先会检查方法抛出的异常是不是在rollbackFor的属性值中,如果异常在rollbackFor列表中,不管是什么类型的异常,一定会回滚;
  2. 如果你抛出的异常不在rollbackFor列表中,Spring会判断异常是不是RuntimeException,如果是一定回滚
  3. 总结:抛出指定异常或者是运行时异常都会回滚  

四、使用 AspectJ 的 AOP 配置管理事务

1.加入aspectj 的依赖坐标:

  1)要使用的是aspectj框架,在pom.xml文件中需要加入aspectj 的依赖坐标

<dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>5.2.5.RELEASE</version></dependency>
2.声明事务管理器对象:

    在applicationContext.xml文件中声明事务管理器对象:

    <bean id="xx" class="DataSourceTransactionManager">  

  (因为你是用的事务管理器的mybatis实现类)

 3.配置业务方法的事务属性
  1. 声明方法需要的事务类型(配置方法的事务属性【隔离级别,传播行为,超时】)
        为事务通知设置相关属性。用于指定要将事务以什么方式织入给哪些方法。例如,应用到 buy 方法上的事务要求是必须的,且当 buy 方法发生异常后要回滚业务。

        你可以使用通配符,但是方法的命名需要有一定的规范,所有添加都是add开头  所有修改都是modify开头 所有删除都是remove开头...

4.配置切入点表达式:

        指定哪些类需要用到事务:

5.配置增强器:

         写的这些类得和那些需要用到事务的方法关联上:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/28671.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于STM32和人工智能的智能水质监测系统

目录 引言环境准备智能水质监测系统基础代码实现&#xff1a;实现智能水质监测系统 4.1 数据采集模块4.2 数据处理与分析4.3 控制系统4.4 用户界面与数据可视化应用场景&#xff1a;智能水质管理与优化问题解决方案与优化收尾与总结 1. 引言 随着环境保护意识的提高&#xf…

【C/C++】【学生成绩管理系统】深度剖析

可接各类C/C管理系统课设 目录 实现功能 部分1&#xff1a;系统设置和主菜单 1. 引入头文件 2. 定义结构体 3. 函数声明 4. 主函数 部分2&#xff1a;添加学生信息 部分3&#xff1a;删除学生信息 部分4&#xff1a;修改学生信息 部分5&#xff1a;查询学生信息 部分…

数组元素的内存地址计算【数据结构与算法C#版】

数组元素被存储在连续的内存空间中&#xff0c;这意味着计算数组元素的内存地址非常容易。给定数组内存地址&#xff08;首 元素内存地址&#xff09;和某个元素的索引&#xff0c;我们可以使用下方图 所示的公式计算得到该元素的内存地址&#xff0c;从而直接 访问该元素。 观…

电源小白入门学习11——反激电源电路原理

电源小白入门学习11——反激电源、正激电源 隔离电源变压器介绍反激电源 前面我们学习了BUCK、BOOST、BUCK-BOOST 等各种各样的DCDC变换器&#xff0c;但是他们都有一共同的特点&#xff0c;即能量的传输路径时一个完整的通路&#xff0c;输入与输出之间不存在电气隔离&#xf…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 字符串变换(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 字符串变换(100分) 🌍 评测功能需要订阅专栏后私信联系清隆…

【Unity实战篇】| 快速制作一个简易时钟,包括2D和3D时钟

前言 【Unity实战篇】| 快速制作一个时钟&#xff0c;包括2D和3D时钟一、2D时钟制作1.1 钟表盘制作1.2 指针制作1.3 钟表搭建1.4 设置时钟的中心点1.5 时钟旋转逻辑 二、3D时钟制作2.1 搭建表盘和指针2.2 调整指针的位置和节点2.3 时钟旋转逻辑 总结 前言 时钟 这个东西想必不…

JAVA小知识21:单列集合顶层接口Collection的使用

一、Collection简介 Collection是单列集合的顶层接口&#xff0c;所有的单列集合都集成自Collection。 那么什么是单列集合呢&#xff1f;我们上篇文章提到了List与ArrayList&#xff0c;List就是单列集合&#xff0c;他是无需可重复单列集合的顶层抽象类&#xff0c;我们学…

定个小目标之刷LeetCode热题(22)

这道题最容易想的就是排序后再遍历&#xff0c;但是时间复杂度就不是O(n)了&#xff0c;所以还是得用更优的解法&#xff0c;直接看题解&#xff0c;它是使用了HashSet&#xff0c;遍历数组&#xff0c;对于每一个数x&#xff0c;如果不存在x - 1则进入内循环&#xff0c;否则跳…

适合小白学习的项目1906java Web智慧食堂管理系统idea开发mysql数据库web结构java编程计算机网页源码servlet项目

一、源码特点 java Web智慧食堂管理系统是一套完善的信息管理系统&#xff0c;结合java 开发技术和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 前段主要技术 bootstra…

C语言的网络编程

目录 引言 一、TCP/IP概述 1. TCP&#xff08;Transmission Control Protocol&#xff09; 2. UDP&#xff08;User Datagram Protocol&#xff09; 二、Socket编程基础 1. 服务器端 2. 客户端 三、URL与HTTP编程 1. 使用libcurl进行HTTP请求 表格总结 TCP/IP与Socke…

aop注解快速实现数据脱敏返回

说明&#xff1a; 公司之前数据接口数据管理不严格&#xff0c;很多接口的敏感数据都没有脱敏处理&#xff0c;直接返回给前端了&#xff0c;然后被甲方的第三方安全漏洞扫出来&#xff0c;老板要求紧急处理&#xff0c;常用的话在单个字段上加上脱敏注解会更加的灵活&#xf…

基于Quartus Prime18.1的安装与FPGA的基础仿真(联合Modelsim)教程

Quartus是一种美国科技公司Intel&#xff08;英特尔&#xff09;公司开发的FPGA&#xff08;现场可编辑门阵列&#xff09;设计编译软件&#xff0c;用作设计、仿真、综合和布局、支持多种编程语言&#xff0c;包括VHDL、Verilog等&#xff0c;并具有丰富的功能和工具库&#x…

SpringCloud学习笔记 - 1、Boot和Cloud版本选型

文章目录 前言需要&#xff08;学习/用到&#xff09;的技术SpringBoot版本的选择我们为什么要使用 Java 17&#xff0c;以及SpringBoot 3.2 呢&#xff1f; SpringCloud 版本的选择SpringCloud 命名规则Springcloud Alibaba 版本的选择如何确定Boot&#xff0c;Cloud&#xff…

大模型太贵?找找自己的原因好吧?

什么&#xff1f; 炼个大模型还嫌贵&#xff1f; 到底哪里贵了&#xff01;&#xff1f; 大模型算力贵&#xff1f;哪里贵了&#xff01;&#xff1f; 争先恐后训练大模型&#xff0c; 搞得现在“算力慌”“一卡难求”&#xff0c; 算力当然水涨船高了! “特供版”GPU又…

MYSQL、ORACLE、PostgreSQL数据库对象层次及权限管理对比

文章目录 前言一、PostgreSQL二、MySQL三、Oracle 前言 本文为出于自己扩展、比较、图形化的思维路径自行总结归纳&#xff0c;可能有些细节不太准确&#xff0c;欢迎指正。 MySQL、Oracle、PostgreSQL关系型数据库都有管理员用户、用户、权限管理、表函数索引等数据库对象&am…

hexo实战:(二)个人独立博客优化合集

前言 上次介绍了使用 HexoGitHub Pages&#xff0c;零成本搭建一个专属自己的独立博客网站。我觉得那篇文章是没有入门门槛的&#xff0c;不管你是什么行业&#xff0c;只要想打造个人 IP&#xff0c;又不太想受博客平台约束&#xff0c;那么读完后动手操作一下也能轻松完成。…

[vue3]组件通信

自定义属性 父组件中给子组件绑定属性, 传递数据给子组件, 子组件通过props选项接收数据 props传递的数据, 在模版中可以直接使用{{ message }}, 在逻辑中使用props.message defineProps defineProps是编译器宏函数, 就是一个编译阶段的标识, 实际编译器解析时, 遇到后会进行…

Oracle 是否扼杀了开源 MySQL

Oracle 是否无意中扼杀了开源 MySQL Peter Zaitsev是一位俄罗斯软件工程师和企业家&#xff0c;曾在MySQL公司担任性能工程师。大约15年前&#xff0c;当甲骨文收购Sun公司并随后收购MySQL时&#xff0c;有很多关于甲骨文何时“杀死MySQL”的讨论。他曾为甲骨文进行辩护&#…

【GD32F303红枫派使用手册】第十七节 USART-中断串口收发实验

17.1 实验内容 通过本实验主要学习以下内容&#xff1a; 使用中断进行串口收发 17.2 实验原理 前面章节中我们已经学习了串口的状态标志位&#xff0c;本实验就是使用TBE中断和RBNE中断来实现中断收发数据&#xff0c;实验原理是RBNE中断用来接受数据&#xff0c;IDLE中断用…

记录第一次edusrc挖掘

文章目录 一、前言二、漏洞说明截止目前已修复 一、前言 edusrc平台介绍 我们可以在关于页面看到edusrc的收录规则 现阶段&#xff0c;教育行业漏洞报告平台接收如下类别单位漏洞&#xff1a; 教育部 各省、自治区教育厅、直辖市教委、各级教育局 学校 教育相关软件 可以看到…