Spring声明式事务管理

掌握Spring+MyBatis的声明式事务管理 在现代的软件开发中,事务管理是保证数据一致性和业务逻辑正确执行的核心机制之一。本章将深入浅出地介绍Spring框架下事务管理的概念,为读者提供一个全面的概览,并为后续章节中将要深入探讨的声明式和编程式事务管理打下坚实的基础。事务是数据库管理系统执行过程中的一个逻辑单位,由一系列的操作组成,这些操作要么全部成功,要么全部失败。在应用程序中,事务的主要作用是确保数据的一致性和完整性。在IT领域,特别是在金融、电子商务以及需要可靠数据一致性的任何系统中,事务的使用至关重要。 阅读详情

补充说明:

使用事务的目的是将整个业务的逻辑处理置于同一个事务中,方便对整个业务进行管理,如业务的事务回滚;

一、什么是声明式事务管理:

在编写代码时,为了将一个业务的核心逻辑处理放入事务中,有时会这样写:

Session session = sf.openSession();//打开一个session
        session.getTransaction().begin();//开启一个事务
        Query query = session.createQuery("from News");//核心逻辑处理
        List<News> allNewList  = query.getResultList();//核心逻辑处理
        session.getTransaction().commit();//提交事务
        session.close();//关闭session

如果一个项目中有很多个业务都要用到事务,那么每次都需要将打开session、开启事务、提交事务、关闭session等步骤执行一遍,如果每次都直接编写相应的代码来执行,肯定不合适,因为这几个步骤都是固定不变,所以我们可以利用spring的aop,将这几个步骤放到横切关注点中,交由spring来帮我们执行,而我们只需要声明一下,告诉spring,哪些业务需要使用事务

二、实现声明式事务管理

1.配置applicationContext.xml文件,加入下列代码

<!-- 配置事务-->
    <!-- 配置Hibernate的局部事务管理器,使用HibernateTransactionManager类-->
    <bean id="transactionManager"
         class="org.springframework.orm.hibernate5.HibernateTransactionManager">
            <!-- HibernateTransactionManager   bean需要依赖注入一个SessionFactory bean的引用 -->
            <property name="sessionFactory" ref="sessionFactory"/>
    </bean>

      <!--  配置事务增强处理,指定事务管理器 -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="add*" propagation="REQUIRED"/>
            <tx:method name="del*" propagation="REQUIRED"/>
            <tx:method name="get*" propagation="REQUIRED" read-only="true"/>        
            <tx:method name="*" propagation="REQUIRED" read-only="true"/>
         </tx:attributes>
    </tx:advice>

    <aop:config>
        <!-- 配置一个切入点,匹配news.service下所有类执行的所有方法 -->
        <aop:pointcut id="txPointCut" expression="execution(* news.service.*.*(..))" />
        <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"/>
    </aop:config>

2.修改之前的事务处理 ;

Session session = sf.openSession();//打开一个session
        session.getTransaction().begin();//开启一个事务
        Query query = session.createQuery("from News");//核心逻辑处理
        List<News> allNewList  = query.getResultList();//核心逻辑处理
        session.getTransaction().commit();//提交事务
        session.close();//关闭session

改为:

Session session = sf.getCurrentSession();//获取session
        Query query = session.createQuery("from News");//核心逻辑处理
        List<News> allNewList  = query.getResultList();//核心逻辑处理

openSession()是新建一个session,在使用声明式事务管理后,事务都交由spring去处理,不必再写开启事务、提交事务的代码,同时所有的transaction都使用同一个session,这个session是spring来管理的的,所以无需再自己open一个新的session,直接向spring get即可,而且get了spring的session后,无需编写close(),spring会自动帮我们关闭,而如果不小心用的是自己open的新的session,最后还要自己写close(),spring不会自动帮我们关闭

YOLO11改进 - 卷积Conv | DEGConv(方向引导边缘门控卷积) : 空间分块、方向先验、轻量边缘增强 本文介绍了方向引导边缘门控卷积(DEGConv),一种专为增强边缘敏感度与方向感知能力设计的轻量级模块。该方法通过 Sobel 算子生成方向嵌入,结合条纹卷积提取水平与垂直边缘特征,并利用门控机制动态抑制背景噪声,从而精准捕捉细粒度结构。我们将 DEGConv 成功集成进 YOLO11,在 Backbone 的 SPPF 后及 Neck 的 P3、P4 分支中引入该模块以优化特征提取。实验证明,集成 DEGConv 的 YOLO11 在检测任务中表现优异,有效提升了模型对复杂边缘与方向特征的建模能力。 阅读详情

相关推荐

在树莓派5(8G版)上运行Ollama + LLM

直接上结论,Ollama在树莓派上能安装,且本身运行起来毫无压力,但具体到大语言模型,Deepseek似乎不总是最佳选择。

ki1381的专栏 1648

Spring:声明式事务

回顾事务 事务在项目开发过程非常重要,涉及到数据的一致性的问题,不容马虎! 事务管理是企业级应用程序开发中必备技术,用来确保数据的完整性和一致性。     事务就是把一系列的动作当成一个独立的工作单元,这些动作要么全部完成,要么全部不起作用。     事务四个属性ACID 原子性(atomicity) 事务是原...

adsdaas的博客 492

QCM6490平台DDR测试:从QDUTT配置到眼图分析的实战指南

本文详细介绍了QCM6490平台DDR测试的全流程,从QDUTT工具安装配置到眼图分析,提供了实战操作指南和常见问题解决方案。通过具体案例分享,帮助工程师掌握DDR测试技巧,确保内存稳定性,特别适用于物联网和边缘计算设备的开发调试。

weixin_33910191的博客 455

Spring 声明式事务管理

    大多数Spring Framework的用户选择声明式事务管理. 这种方式对应用代码的影响最小, 并且最符合一个非 侵入型轻量级容器的理想.1 理解Spring Framework的声明式事务实现        告诉你简单的为你的类注释上@Transactional的注释, 为配置加上@EnableTransactionManagement 是不够充分的, 除非你理解了他们全部是如何工作的...

有天你会让我妒忌的 2万+

STM32H743内存告急?手把手教你用CubeMX+FMC外扩32MB SDRAM(W9825G6KH-6)

本文详细介绍了如何在STM32H743上使用CubeMX和FMC外扩32MB SDRAM(W9825G6KH-6),解决内存不足问题。从硬件选型、CubeMX配置到初始化代码实现,提供完整的配置教程和性能优化技巧,帮助开发者高效扩展内存,适用于图形界面和复杂算法处理。

weixin_30568591的博客 492

光电系统光轴校准与偏差控制实战指南

光轴作为光电系统的空间基准坐标系,直接影响多光谱传感器的协同工作精度。在包含可见光、红外与激光测距的复合系统中,光轴偏差会导致目标识别误差与打击精度下降。通过机械基准建立、光学通道粗调和多光谱协同校准等工厂级标定流程,结合千米靶标法、星点校准法等野战应急方案,可有效控制光轴偏差。典型应用场景中,温度补偿与振动抑制技术能维持光轴稳定性,如某舰载系统通过500Hz高频视觉伺服实现0.3mrad振动补偿。掌握这些光轴标定与保持策略,对提升光电系统在侦察、测距等场景的实战性能具有关键价值。

weixin_36149538的博客 273

Spring的声明式事务管理

笔者之前从原理的层面讲解过Spring的事务处理,包括编程式事务处理和声明式事务处理,详见博客 Spring事务处理-编程式事务和声明式事务。这篇文章从原理的层面讲解了Spring的事务管理机制,读完了这篇博客,笔者可以一针见血的使用spring的处理机制。今天这篇博客仅仅是Spring声明式处理的正常使用,偏向工程的使用说明。还是以最近的几篇博客中常用的test工程为例,具体如下:首先,第一步:...

义臻的博客 752

Centos7 yum 报错「Errno 256」No more mirrors to try 解决方法

首先该问题的出现是由于网络的震荡导致,这是重点。(1)将源更换成阿里云的官方源,步骤参考如上(2)同时将zabbix的官方源更换成阿里云里面的zabbix镜像源,因为zabbix官方源根本网络不通,因为国家防火墙的拦截,导致网络不通。这是阿里源的zabbix镜像地址: https://mirrors.aliyun.com/zabbix/zabbix/4.4/rhel/7/修改系统中早期生成的zabbix.repo文件,如下:主要是把baseurl替换成阿里云的zabbix镜像地址即可。

专注基础架构领域 3873

Spring学习之Spring的声明式事务管理详解

声明式事务管理大多数Spring用户选择声明式事务管理的原因是,这个是对应用代码影响最小的选择,因此也最符合 非侵入式 轻量级容器的理念。 Spring声明式事务管理可以在任何环境下使用。只需更改配置文件, 它就可以和JDBC、JDO、Hibernate或其他的事务机制一起工作。 Spring的声明式事务管理可以被应用到任何类(以及那个类的实例)上。 Spring提供了声明式的回滚规则。 Sprin

一大三千的博客 1万+

【FISCO-BCOS】 八、ubuntu配置Java环境

ubuntu配置Java环境需根据自己的java版本号进行细节修改,本文以jdk11.0.18版本为例。ps:通过此法还可以查看java安装路径,但必须是环境配置成功的情况下才能使用。二、添加Java环境路径。四、检查java环境设置。

naihe_fish的博客 4307

2023华为od机试C卷【宽度最小的子矩阵】Python 实现

给定一个矩阵,包含N*M个整数,和一个包含K个整数的数组现在要求在这个矩阵中找一个宽度最小的子矩阵,要求子矩阵包含数组中所有的整数。

MISAYAONE的博客 2185

Spring事务管理--声明式事务管理

Spring的事务管理分为两种方式:1,传统的编程式事务管理(编码式事务管理);2,声明式事务管理。 Spring的声明式事务管理是指将事务管理代码从业务方法中分离出来,以申明的方式实现事务管理。Spring的声明式事务管理是建立在AOP基础上的:主要的思想是将事务作为一个“切面”代码来单独编写,然后再通过AOP技术将事务管理的切面植入到业务目标中去。本质是在方法前后进行拦截,然后在开始之前创建或者加入一个事务,在执行完毕后根据执行情况来提交或者回滚事务。 实现方式:1,基于XML的方式;2,基于Ann

Lqf111的博客 983

模拟电路综合笔试题解析

本专栏预计更新60期,当前为第10期,文章约6000字,旨在帮助读者掌握模拟电路笔试的核心知识点与实战技巧。文章分为五个章节,涵盖基础理论、高频考点、大厂题目解析等内容。首先,文章详细解析了DC-DC与LDO的区别及选型依据,并通过真题分析帮助读者理解其应用场景。接着,文章深入探讨了运放电路设计、同步降压电路设计等高频考点,并结合实际案例提供解决方案。此外,文章还分享了特斯拉、华为、大疆等大厂的面试题及解析,帮助读者应对复杂电路设计挑战。最后,文章总结了模拟电路设计中的关键技巧与优化方法,为读者提供全面的笔

启芯硬件的博客 468

Spring的事务管理 - 声明式事务

基于Spring AOP实现。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。编程式事务管理使用可实现更细粒度的事务控制。声明式事务管理不需要入侵代码,通过就可以进行事务操作,更快捷而且简单且大部分业务都可以满足,推荐使用。其实不管是编程式事务还是声明式事务,最终调用的底层核心代码是一致的。

埃泽漫笔 1556

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Java Spring 中的声明式事务管理

Spring框架中的声明式事务管理是一种非编程式的事务管理方式,它允许开发者通过配置而非编程的方式来管理事务。这种方式使得事务管理与业务逻辑解耦,提高了代码的可读性和可维护性。 在Spring中,声明式事务管理主要依赖于AOP(面向切面编程)来实现。AOP允许开发者将跨多个方法和类的通用逻辑(如事务管理、日志记录等)定义为切面,并将其应用到特定的连接点(如方法执行)上。这样,当方法被调用时,切面中的逻辑会自动执行。

编程小弟的博客 1617

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Spring事务管理——使用XML配置声明式事务

事务简介:事务管理是企业级应用程序开发中必不可少的技术,用来确保数据的完整性和一致性事务就是一系列的动作,它们被当作一个单独的工作单元。这些动作要么全部完成,要么全部不起作用事务的四个关键属性(ACID)① 原子性(atomicity):事务室一个原子操作,有一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用② 一致性(consistency):一旦所有事务动作完成,事务就被提交。

Evankaka的专栏 1万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

spring 声明式事务管理

spring 声明式事务管理事务是我们在用 jdbc 操作数据库时,不可避免的问题。由于事务的执行。由于事务具有ACID 四大特性,执行起来还要受到事务的隔离级别,传播行为,锁机制等影响, 所以通过原生 jdbc 来控制事务面临着不少问题,同时通过原生 jdbc 控制事务也会带来大量代码冗余,如 conection.commit() 事务提交,conection.rollb...

qq_41578371的博客 195

Spring的事务操作一站式学习【事务的概念、注解声明式事务管理、声明式事务管理参数配置、XML声明式事务管理、完全注解声明式事务管理】(超详细)

目录事务的概念搭建事务操作的环境创建数据库表,添加记录代码演示事务场景引入事务管理介绍注解声明式事务管理声明式事务管理参数配置propagation:事务传播行为ioslation:事务隔离级别timeout:超时时间readOnly:是否只读rollbackFor:回滚noRollbackFor:不回滚XML声明式事务管理(不常用)完全注解声明式事务管理 事务的概念 事务的概念(通俗理解):事务是数据库操作最基本单元,逻辑上一组操作,要么都成功,如果有一个失败所有操作都失败。 典型场景:银行转账(这两件

『愚』的博客 4454

spring声明式实现事务管理

spring实现事务管理 事务(Transaction)是面向关系型数据库(RDBMS)企业应用程序的重要组成部分,用来确保数据的完整性和一致性。 事务的ACID 特性 原子性(Atomicity):一个事务是一个不可分割的工作单位,事务中包括的动作要么都做要么都不做。 一致性(Consistency):事务必须保证数据库从一个一致性状态变到另一个一致性状态,一致性和原子性是密切相关的。 隔离性(Isolation):一个事务的执行不能被其它事务干扰,即一个事务内部的操作及使用的数据对并发的其它事务是隔

weixin_45058888的博客 250

Spring系列--声明式事务管理

Spring事务管理概述 Spring的事务管理简化了传统的事务管理流程,并且在一定程序上减少了开发者的工作量。 事务管理的核心接口 在Spring的所有JAR包中包含一个名为Spring-tx-5.0.2.RELEASE的JAR包,该包就是Spring提供的用于事务管理的依赖包。在该JAR包中的org.Springframework.transaction包中有3个接口文件: PlatformTransactionManager、TransactionDefinition和TransactionStatu

qq_43404873的博客 2144

spring 声明式事务管理注解方式实现

使用注解实现Spring的声明式事务管理,更加简单! 步骤:          1) 必须引入Aop相关的jar文件          2) bean.xml中指定注解方式实现声明式事务管理以及应用的事务管理器类          3)在需要添加事务控制的地方,写上: @Transactional   @Transactional注解:          1)应用事务的注解

李卫康的博客 3565

spring事务管理之声明式事务管理详解

spring为我们提供了两种的事务管理,编程式事务管理和声明式事务管理,因为spring提倡使用声明式事务管理,所以笔者本身也具体学习研究和应用声明式事务,这里只详细谈谈声明式事务,而编程式事务就一句概括; 编程式事务:使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。 声明式事务:spring的声明式事务的实现方式有两种,一种是基于AOP切面实现声明式事务,而

wit_cx的博客 282

两种Spring声明式事务管理简述之二

3、基于 命名空间的声明式事务管理(以配置hibernate框架为例) 在以往的编程式事务管理中事务管理的代码嵌套在业务逻辑代码之中,包括事务的开始、提交或者回滚,这样的架构使得代码杂糅过多,不仅实现复杂,并且后期维护起来也更加困难。Spring声明式事务管理在底层采用了AOP技术,即将事务管理作为一个“方面”代码单独编写,程序员只需要关心业务逻辑代码的实现,然后通过AOP技术将事务管理的“方面...

llc950819的博客 431
上一篇: Struts2实现MVC( 实例解析)
下一篇: Struts2 配置xml文件
a_good_programer
博客等级 码龄10年 18粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值