首页 > 其他分享 >Spring26 - 声明式事务

Spring26 - 声明式事务

时间:2023-02-08 16:11:40浏览次数:36  
标签:状态 事务 Spring26 要么 代码 声明 数据库 conn

声明式事务概念

事务基本概念

①什么是事务

数据库事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。

②事务的特性

A:原子性(Atomicity)

一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。

C:一致性(Consistency)

事务的一致性指的是在一个事务执行之前和执行之后数据库都必须处于一致性状态。

如果事务成功地完成,那么系统中所有变化将正确地应用,系统处于有效状态。

如果在事务中出现错误,那么系统中的所有变化将自动地回滚,系统返回到原始状态。

I:隔离性(Isolation)

指的是在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。事务查看数据更新时,数据所处的状态要么是另一事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看到中间状态的数据。

D:持久性(Durability)

指的是只要事务成功结束,它对数据库所做的更新就必须保存下来。即使发生系统崩溃,重新启动数据库系统后,数据库还能恢复到事务成功结束时的状态。

编程式事务

事务功能的相关操作全部通过自己编写代码来实现:

Connection conn = ...;
    
try {
    
    // 开启事务:关闭事务的自动提交
    conn.setAutoCommit(false);
    
    // 核心操作
    
    // 提交事务
    conn.commit();
    
}catch(Exception e){
    
    // 回滚事务
    conn.rollBack();
    
}finally{
    
    // 释放数据库连接
    conn.close();
    
}

编程式的实现方式存在缺陷:

  • 细节没有被屏蔽:具体操作过程中,所有细节都需要程序员自己来完成,比较繁琐。
  • 代码复用性不高:如果没有有效抽取出来,每次实现功能都需要自己编写代码,代码就没有得到复用。

声明式事务

既然事务控制的代码有规律可循,代码的结构基本是确定的,所以框架就可以将固定模式的代码抽取出来,进行相关的封装。

封装起来后,我们只需要在配置文件中进行简单的配置即可完成操作。

  • 好处1:提高开发效率
  • 好处2:消除了冗余的代码
  • 好处3:框架会综合考虑相关领域中在实际开发环境下有可能遇到的各种问题,进行了健壮性、性能等各个方面的优化

所以,我们可以总结下面两个概念:

  • 编程式自己写代码实现功能
  • 声明式:通过配置框架实现功能

标签:状态,事务,Spring26,要么,代码,声明,数据库,conn
From: https://www.cnblogs.com/Ashen-/p/17102235.html

相关文章

  • Spring 如何实现事务管理
    事务管理方式在Spring项目中,我们可以用通过四种方式实现事务管理,分别是编程式事务管理、基于TransactionProxyFactoryBean的声明式事务管理、基于@Transactional的声......
  • Spring—事务
    前言一觉醒来下雨了,今天还是蛮冷的,坐标无锡,及时添衣服啊。话说最近喜欢上了看衬衫,对格子衬衫感兴趣了(据说格子衬衫是程序员的标配,是我越来越像程序员了么...)。早上从床上......
  • Seata分布式事务
    使用Seata版本:1.6.1(2023/2/6最新版)该版本存在很多坑,相较于1.0版本,配置上存在很多差别,如果你的版本不同,请不要参考本文。1.6.1配置存在许多问题,比较难找,如果你使用1.6.1可......
  • ABP的IdentityServer4中使用自定义的claim声明
    ABP的IdentityServer4使用自定义的claim声明,我是想增加一个部门Id,登录用户的中文名称在IdentityServer项目的AbpModule中,context.Services.AddScoped<IProfileServ......
  • Spring:声明式事务
    目录JdbcTemplate简介准备①加入依赖②创建jdbc.properties③配置Spring的配置文件测试①在测试类装配JdbcTemplate②测试增删改功能③查询一条数据为实体类对象④查询多......
  • 有了事务为什么还需要乐观锁和悲观锁
    ​​​​​为什么有了事务这东西,还需要乐观锁悲观锁?事务是粗粒度的概念、乐观锁悲观锁可以更细粒度的控制;比如抢票,假设余票只有1张;隔离级别可以保证事务A和事务B不能读到对......
  • 数组的声明创建
    publicclassDemo02{publicstaticvoidmain(String[]args){//数组是相同数据类型(数据类型可以为任何类型)的有序集合//数组也是对象。数组元素......
  • Spring MVC & SpringBoot & Spring 事务
    ......
  • mysql排查事务及进程的语句
    查询事务SELECT*FROMinformation_schema.INNODB_TRX;查询正在锁的事务SELECT*FROMINFORMATION_SCHEMA.INNODB_LOCKS;查询等待锁的事务SELECT*FROMINFORMATION_SCHE......
  • day67-sql中的事务
    事务要么都成功要么都失败事务原则:ACID原子性,一致性,隔离性,持久性原子性:要么一起成功要么一起失败一致性:针对一个事务操作前后状态一致持久性:事务结束后的数据不会随......