spring事务和数据库事务是怎么实现

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

Spring事务的原理

Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的。对于纯JDBC操作数据库,想要用到事务,可以按照以下步骤进行:

  1. 获取连接 Connection con = DriverManager.getConnection()
  2. 开启事务con.setAutoCommit(true/false);
  3. 执行CRUD
  4. 提交事务/回滚事务 con.commit() / con.rollback();
  5. 关闭连接 conn.close();
    使用Spring的事务管理功能后,我们可以不再写步骤 2 和 4 的代码,而是由Spirng 自动完成。

那么Spring是如何在我们书写的 CRUD 之前和之后开启事务和关闭事务的呢?

Spring中的事务是如何实现的?

  1. Spring事务底层是基于数据库事务和AOP机制的。

  2. 首先对于使用了@Transactional注解的Bean,Spring会创建一个代理对象作为Bean。

  3. 当调用代理对象的方法时, 会先判断该方法上是否加了@Transactional注解

  4. 如果加了,那么则利用事务管理器创建一个数据库连接

  5. 并且修改数据库连接的autocommit属性为false, 禁止此连接的自动提交, 这是实现Spring事务非常重要的一步。

  6. 然后执行当前方法,方法中会执行sql

  7. 执行完当前方法后,如果没有出现异常就直接提交事务。

  8. 如果出现了异常,并且这个异常是需要回滚的就会回滚事务,否则仍然提交事务。

  9. Spring事务的隔离级别对应的就是数据库的隔离级别。

  10. Spring事务的传播机制是Spring事务自己实现的,也是Spring事务中最复杂的

  11. Spring事务的传播机制是基于数据库连接来做的,一个数据库连接一个事务, 如果传播机制配置为需要新开一个事务,那么实际上就是先建立一个数据库连接, 在此新数据库连接上执行sql文章来源地址https://www.toymoban.com/news/detail-636138.html

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

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

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

相关文章

  • Spring Boot中操作数据库的几种并发事务方式

    当有多个 并发 事务时,会发生丢失更新异常。来自一个或多个 事务 的更新可能会丢失,因为其他事务会用其结果覆盖它。 让我们通过一个例子来检验一下。考虑以下执行事务的方法。 public void withdraw(Long accountId, double amount) { Account account = accountRepository.findById(accountId).orEl

    2024年01月22日
    浏览(53)
  • layui+java spring 实现图片文件新增到数据库

    layui+java spring 实现图片文件新增到数据库 1.首先layui是个不再更新的网址有想了解的可以浏览官网 表格组件 table - Layui 文档 2.官网内有专门的组件 代码直接粘过来即可 !DOCTYPE html html head   meta charset=\\\"utf-8\\\"   meta name=\\\"viewport\\\" content=\\\"width=device-width, initial-scale=1\\\"   titleDemo/title  

    2024年02月07日
    浏览(40)
  • 【数据库】Python脚本实现数据库批量插入事务

    在工作中可能会遇到需要批量插入的场景, 而批量插入的过程具有 耗时长 的特点, 再此过程很容易出现程序崩溃的情况.为了解决插入大量数据插入后崩溃导致 已插入数据无法清理 及 未插入数据无法筛出 的问题, 需要编写一个脚本记录已插入和未插入的数据, 并可以根据记录

    2024年02月08日
    浏览(48)
  • Java(一):创建 Spring Boot 项目并实现连接操作MySQL数据库

    MySQL 命令 Maven 相关地址 下载地址: https://maven.apache.org/ maven配置方法地址: https://developer.aliyun.com/mvn/guide 仓库搜索地址: https://mvnrepository.com/ https://repo.maven.apache.org/ maven 本地配置 conf/settings.xml 下载 idea 并配置本地环境 maven Maven 构建 生命周期 Maven 的构建 生命周期 包括 三

    2024年02月07日
    浏览(70)
  • 【数据库】事务的隔离级别以及实现原理

    经常提到数据库的事务,那你知道数据库还有事务隔离的说法吗,事务隔离还有隔离级别,那什么是事务隔离,隔离级别又是什么呢?本文就帮大家梳理一下。 事务,由一个有限的数据库操作序列构成,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。

    2023年04月26日
    浏览(43)
  • Go 语言实现 MySQL 数据库事务

    MySQL事务是指一组数据库操作,它们被视为一个逻辑单元,并且要么全部成功执行,要么全部回滚(撤销)。事务是数据库管理系统提供的一种机制,用于确保数据的一致性和完整性。 事务具有以下特性(通常由ACID原则定义): 原子性(Atomicity):事务中的所有操作要么全

    2024年02月08日
    浏览(47)
  • 【cfengDB】自己实现数据库第0节 ---整体介绍及事务管理层实现

    LearnProj 本文作为数工底层的项目CfengDB开始篇章,介绍开发缘由和实现思路 cfeng之前对数据库研究不深入,之前只是能够做到基本的SQL查询和基本的慢SQL优化,之前拿到数据库系统工程师证书还是只在业务上对于DB系统使用更深入,但是cfeng基于work的理解,当作为一个优秀的产

    2024年02月16日
    浏览(43)
  • java八股文面试[数据库]——数据库三范式

    什么是范式? 范式是数据库设计时遵循的 一种规范 ,不同的规范要求遵循不同的范式。 最常用的三大范式 第一范式(1NF): 属性不可分割 ,即每个属性都是不可分割的原子项。(实体的属性即表中的列) 理解:一个列不能包含两个数据 第二范式(2NF):满足第一范式;且不存在

    2024年02月10日
    浏览(40)
  • JAVA面试数据库篇

    目录 数据库篇 一.优化 1.定位慢查询 MYSQL中,如何定位慢查询? 2.SQL执行计划 SQL语句执行慢,如何分析呢? 3.索引 了解过索引吗?(什么是索引) 索引的底层数据结构了解过吗? B树和B+树的区别是什么呢? 什么是聚簇索引什么是非聚簇索引?/什么是聚集索引,什么是二级索

    2024年02月13日
    浏览(33)
  • JAVA面试部分——后端-数据库前篇

    5.1 mysql中char和varchar的区别,varchar(100)中的一百的含义,能存放多少汉字? 在MySQL中,CHAR和VARCHAR都是用来存储字符串的数据类型,但它们之间存在一些主要区别。 存储方式:CHAR是固定长度的,而VARCHAR是可变长度的。这意味着CHAR会根据你设定的长度存储字符串,即使实际

    2024年01月16日
    浏览(45)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包