spring事务处理

这篇具有很好参考价值的文章主要介绍了spring事务处理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 一,什么是事务
 概念:在数据库操作中涉及到事务的概念。通俗一点说,在MySQL中,事务就是一组sql语句的集合,集合中有多条sql语句,可能是insert,update,select,delete,我们希望这些多个sql语句都能成功,或者都失败,这些sql语句的执行是一直的,作为一个整体执行。

事务的特点(ACID)
原子性(Atomicity):事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用。
一致性(Consistency):一旦事务完成(不管成功还是失败),系统必须确保它所建模的业务处于一致的状态,而不会是部分完成部分失败。在现实中的数据不应该被破坏。
隔离性(Isolation):可能有许多事务会同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏。
持久性(Durability):一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响,这样就能从任何系统崩溃中恢复过来。通常情况下,事务的结果被写到持久化存储器中。
二,在什么时候想到使用事务
        当我们的操作涉及到多个表,或者是多个sql语句的增加insert删除delete修改update的时候,
需要保证这些语句都是成功才能完成我们的功能;或者保证这些语句都失败,保证操作是符合要求的。最明了的例子就是转账,从A账户转到B账户中,要保证从A中扣除的金额一定要加到B里去。如果A到B转账成功,那么A扣B加,要保证A和B的账户是均衡的。如果A向B转账的过程中扣款失败了,那就应该把操作都回退,A也不扣,B也不加,保证A和B中账户数据的平衡。 
在java代码中写程序,控制事务,此时事务应该放在哪里呢?
在开发中,事务是放在serviceImpl类的业务方法上的,因为一个业务方法可能涉及到多个dao的调用,执行多个sql语句。
三,使用JDBC访问数据库,还是Mybatis访问数据库怎么处理事务
JDBC访问数据库,处理事务:连接对象Connection conn;事务提交 conn.commit ();事务回滚:conn.rollback ();
Mybatis 访问数据库,处理事务:事务提交:SqlSession.commit ();事务回滚:SqlSession.rollback ();
四, 问题3中事务的处理方式有什么不足
(1)不同的数据库访问技术,处理事务的对象,方法不同。JDBC使用的是Connection对象,Mybatis访问对象使用的事
SqlSession。方法不同就需要了解不同数据库访问技术使用事务的原理。
(2)掌握多种数据库中事务的处理逻辑,知道什么时候提交,什么时候回滚。
(3)处理事务的多种方法。
总结:多种数据库的访问技术,有不同的事务处理的机制,对象,方法。
五,怎么解决问题4中的这些不足
spring提供了一种处理事务的统一模型,能使用统一的步骤,方式,完成多种不同数据库访问技术的事务处理。
使用spring的事务处理机制,可以完成MyBatis访问数据库的事务处理。
使用spring的事务处理机制,可以完成Hibernate访问数据库的事务处理。

spring事务处理

六,spring框架中提供的事务处理方案(基于AOP)
1、项目的构建可参考:https://blog.csdn.net/qq_36763419/article/details/113925334

2,基于注解的方案(@Transactional):适用于中小型项目 >>【关键代码】
spring框架用aop实现给业务方法增加事务的功能,使用 @Transactional 注解增加事务。@Transactional注解是spring自己的注解。放在 public 方法的上面,表示当前这个方法具有事务,可以给注解的属性赋值,来表示具体的隔离级别、传播行为、异常信息等等。
@Transactional的属性

isolation:用于设置隔离级别,该属性类型为isolation枚举,默认值为 Isolation.DEFUALT。
readOnly:用于设置方法对数据库的操作是否只读的,该属性为boolean,默认值为false。
timeout:用于设置本操作与数据库连接超时时限。单位为妙,类型为int,默认值为-1,即没有时限。
rollbackFor:指定需要回滚的异常类,类型为Class[],默认值为空数组。当然,若只有一个异常类,可以不使用数组。
rollbackForClassName:指定需要回滚的异常类类名。类型为String[],默认值为空数组。当然,若只有一个异常类,可以不使用数组。
noRollbackFor:指定不需要回滚的异常类,类型为Class[],默认值为空数组。当然,若只有一个异常类,可以不使用数组。(与rollbackFor相反)
noRollbackForClassName:指定不需要回滚的异常类类名,类型为Class[],默认值为空数组。当然,若只有一个异常类,可以不使用数组。(与rollbackForClassName相反)

使用注解的步骤:
(1)声明事务管理器对象

<!-- mybatis的事务管理器,id自定义 -->
<!--1、声明spring的事务管理器,id自定义-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!--连接的数据库,指定数据源-->
	<property name="dataSource" ref="myDataSource"/>
</bean>

(2)开启事务注解驱动,告诉spring,使用注解的方式管理事务。spring使用aop机制,创建@Transactional所在的类代理对象,给方法加入事务功能。

<!--2、开启事务注解驱动,告诉spring使用注解管理事务,创建带对象
	transaction-manager:事务管理器id
-->
<tx:annotation-driven transaction-manager="transactionManager"/>

spring给业务方法加入事务:
在业务方法执行之前,开启事务;在业务方法之后,提交或回滚事务。使用的是 aop的环绕通知。环绕通知由spring完成。

@Around("增加事务功能的业务方法名称")
Object myAround(){
	//开启事务,spring开启
	try{
	<!--业务代码-->
	//spring的事务管理 .rollback()
	}catch(Exception e){
	//spring的事务管理 .rollback()
	}
	//开启事务,spring开启
}

 基于XML配置文件方案(AspectJ框架):适用大型项目 >>【关键代码】
1、大型项目中有很多类,方法,需要大量的配置事务,使用aspectj框架功能,在spring配置文件中声明类,方法需要的事务。这种方式业务方法和事务配置完全分离。
2、实现步骤:都是在xml配置文件中实现的。
(1)要使用的是aspectj框架,加入依赖

<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-aspects</artifactId>
	<version>${spring.version}</version>
</dependency>

(2)声明事务管理器对象

<!-- mybatis的事务管理器,id自定义 -->
<!--1、声明spring的事务管理器,id自定义-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!--连接的数据库,指定数据源-->
	<property name="dataSource" ref="myDataSource"/>
</bean>

(3)声明方法需要的事务类型(配置方法的事务属性:隔离级别传播行为超时
(4)配置AOP:指定哪些类需要创建代理对象。

业务代码

总结Spring的事务:
1.管理事务的是事务管理器及其实现类。
2.Spring的事务是一个统一管理模型:
(1)指定要使用的事务管理器的实现类,使用xml配置文件中的<bean ></bean >标签
(2)指定哪些类,哪些方法需要加入事务的功能
(3)指定方法需要的隔离级别,传播行为和超时时间
我们需要告诉Spring我们的项目中类信息,方法的名称,方法的事务传播行为。文章来源地址https://www.toymoban.com/news/detail-416751.html

到了这里,关于spring事务处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Spring/MySQL数据库系列】数据库事务的特点与隔离级别

    ⭐️ 前面的话 ⭐️ 本文已经收录到《Spring框架全家桶系列》专栏,本文将介绍有关数据库事务的特点以及隔离级别。 📒博客主页:未见花闻的博客主页 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 📌本文由 未见花闻 原创, CSDN 首发! 📆首发时间:🌴2023年5月20日🌴 ✉️坚

    2024年02月05日
    浏览(55)
  • Spring事务管理 | 数据库连接池流程原理分析

    💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! 事务(Transaction),一般是指要做的或所做的事情。在计算机 术语 中是指访问并可能更新数据库中各种 数据项 的一个程序 执行单元 。事务通常由 高级数据库 操纵语言或编程语言(如SQL,C++或Java)书写的 用户程序

    2024年02月02日
    浏览(50)
  • 初识mysql数据库之事务的概念及操作

    目录 一、数据库多客户端访问问题 1. 数据库的CURD无限制带来的问题 2. 如何解决CURD导致的问题 二、事务的概念 1. 什么是事务 2. 事务的四个属性 3. mysql对事务的管理 4. 为什么会有事务 5. 事务的版本支持 三、事务的操作 1. 事务提交方式 2. 事务操作的准备工作 2.1 数据库是网

    2024年02月15日
    浏览(44)
  • 数据库 Bags 概念和操作

    1.1 Set Set 是一个没有重复数据的集合。Set 操作的参与方和结果里都没有重复元素。 1.2 Bags Bags 是可以有重复数据的集合。数据库中操作一般是 Bag 操作。 2.1 Select C1 C2 C3 1 2 5 3 4 6 1 2 7 1 2 8 select C1, C2 的结果 C1 C2 1 2 3 4 1 2 1 2 2.2 UNION ALL 假设记录 t 在关系 S 中出现 n 次,在关系

    2024年02月10日
    浏览(54)
  • 【从删库到跑路】一文带你明白MySQL数据库的 事务 操作

    🎊专栏【MySQL】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【如愿】 大一同学小吉,欢迎并且感谢大家指出我的问题🥰 建议大家先看目录 是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作

    2024年02月13日
    浏览(47)
  • 【SQL Server】数据库开发指南(八)高级数据处理技术 MS-SQL 事务、异常和游标的深入研究

    本系列博文还在更新中,收录在专栏:#MS-SQL Server 专栏中。 本系列文章列表如下: 【SQL Server】 Linux 运维下对 SQL Server 进行安装、升级、回滚、卸载操作 【SQL Server】数据库开发指南(一)数据库设计的核心概念和基本步骤 【SQL Server】数据库开发指南(二)MSSQL数据库开发对

    2024年02月07日
    浏览(92)
  • 4、hive的使用示例详解-事务表、视图、物化视图、DDL(数据库、表以及分区)管理详细操作

    1、apache-hive-3.1.2简介及部署(三种部署方式-内嵌模式、本地模式和远程模式)及验证详解 2、hive相关概念详解–架构、读写文件机制、数据存储 3、hive的使用示例详解-建表、数据类型详解、内部外部表、分区表、分桶表 4、hive的使用示例详解-事务表、视图、物化视图、DDL

    2024年02月09日
    浏览(51)
  • MySQL数据库概念、管理以及SQL语句的基本命令操作

    数据(data) 描述事物的符号记录 包括数字,文字、图形、图像、声音、档案记录等 以“记录”形式按统一格式进行存储(记录可以看成一条记录) 表 将不同的记录组织在一起 用来存储具体数据 记录:行 字段(属性):列 以行+列的形式就组成了表(数据存储在表中) 数

    2024年02月08日
    浏览(71)
  • 探索SQL深入理解数据库操作的关键概念与技巧【文末送书】

    SQL(Structured Query Language,结构化查询语言)是一种用于管理关系型数据库的标准化语言。无论是在开发应用程序、进行数据分析还是进行数据库管理,掌握SQL都是至关重要的。本文将从入门级别开始,逐步引导您了解SQL语言的基础知识,直到掌握高级技巧。 创建数据库 首先

    2024年04月22日
    浏览(71)
  • 【JavaEE & Spring】MyBatis 操作数据库(基础操作)

    使⽤MyBatis完成简单的增删改查操作, 参数传递. 掌握MyBatis的两种写法: 注解 和 XML⽅式 掌握MyBatis 相关的⽇志配置 在应⽤分层学习时, 我们了解到web应⽤程序⼀般分为三层,即:Controller、Service、Dao . 之前的案例中,请求流程如下: 浏览器发起请求, 先请求Controller, Controller接收

    2024年01月24日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包