系列五、声明式事务(xml方式)

news2024/11/16 11:47:54

一、概述

         声明式事务(declarative transaction management)是Spring提供的对程序事务管理的一种方式,Spring的声明式事务顾名思义就是采用声明的方式来处理事务。这里所说的声明,是指在配置文件中声明,用在Spring配置文件中声明式的处理事务来代替业务逻辑中使用代码处理事务,这样做的好处是:事务管理不侵入开发的组件,具体来说就是业务逻辑对象不会意识到自己正在事务管理之中,事实上也应该如此,因为事务管理是属于系统层面的服务,而不是业务逻辑的一部分,如果想要改变事务管理策略的话,也只需要在配置文件中修改配置即可,在不需要事务管理的时候,修改一下配置信息,即可移除事务管理服务,无需改变代码重新编译,这样维护起来也很方便,Spring中是使用aop来完成声明式事务管理的,因而声明式事务是以方法为单位的,也即声明式事务是作用在业务方法上的。

二、声明式事务(xml方式)环境搭建

2.1、项目概览

2.2、配置思路

第一步:配置事务管理器;

第二步:配置事务要处理的方法;注意事项:一旦配置了事务方法名称规则后,service中的方法一定要按照这里配置的名称,否则事务配置不生效;

第三步:配置aop;

2.3、pom.xml

同 系列四 pom.xml 

2.4、applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd">

    <!-- 组件扫描 -->
    <context:component-scan base-package="org.star"/>

    <!-- 数据源 -->
    <context:property-placeholder location="db.properties"/>
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${db.driver}"/>
        <property name="url" value="${db.url}"/>
        <property name="username" value="${db.username}"/>
        <property name="password" value="${db.password}"/>
    </bean>
    <!--
        配置sqlSessionFactory:读取配置文件,获取数据库相关的信息
    -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <property name="typeAliasesPackage" value="org.star.entity.model"></property>
        <property name="mapperLocations" value="classpath:mapper/*.xml"></property>
        <property name="configuration">
            <bean class="org.apache.ibatis.session.Configuration">
                <property name="logImpl" value="org.apache.ibatis.logging.stdout.StdOutImpl"></property>
            </bean>
        </property>
        <!-- 分页插件 -->
        <property name="plugins">
            <array>
                <bean class="com.github.pagehelper.PageInterceptor">
                    <property name="properties">
                        <!--
                            reasonable=true解释:如果用户输入的不合理的pageSize参数,pageHelper会自动进行调整
                        -->
                        <value>
                            helperDialect=mysql
                            reasonable=true
                        </value>
                    </property>
                </bean>
            </array>
        </property>
    </bean>
    <!--
        配置mapper接口的位置,并指定sqlSessionFactory
        sqlSession = sqlSessionFactory.openSession();
        mapper = sqlSession.getMapper();
    -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="org.star.mapper"></property>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
    </bean>

    <!-- 配置事务管理器 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    <!--
        声明式事务配置:
            spring中的事务是基于aop实现,但使用的不是通知而是拦截器
    -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <!-- 定义事务的对象信息 -->
        <tx:attributes>
            <!-- transfer*:表示以transfer开头的所有方法 -->
            <tx:method name="transfer*" propagation="REQUIRED" isolation="DEFAULT"/>
        </tx:attributes>
    </tx:advice>
    <!-- aop配置 -->
    <aop:config>
        <aop:pointcut id="txPointCut" expression="execution(* org.star.service.*.*(..))"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"></aop:advisor>
    </aop:config>

</beans>

2.5、db.properties

同 系列四 db.properties 

2.6、AccountDO.java

同 系列四 AccountDO.java 

2.7、AccountMapper.java

同 系列四 AccountMapper.java

2.8、AccountMapper.xml

同 系列四 AccountMapper.xml

2.9、AccountService.java

同 系列四 AccountService.java

2.10、AccountServiceImpl.java

/**
 * @Author : 一叶浮萍归大海
 * @Date: 2023/11/24 8:25
 * @Description:
 */
@Service
public class AccountServiceImpl implements AccountService {

    @Resource
    private AccountMapper accountMapper;

    /**
     * 转账
     *
     * @return
     */
    @Override
    public void transferMoney() {
        try {
            // Jack 转出100元
            accountMapper.accountExpenditure("Jack", 100);

            // 模拟异常
            int i = 10 /0;

            // Rose 入账100元
            accountMapper.accountEntry("Rose", 100);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

2.11、SpringJunitTest.java

同 系列四 SpringJunitTest.java

 

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

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

相关文章

什么是高防CDN?CDN的设计原理及应用场景是什么?

随着互联网的快速发展&#xff0c;人们对网络的速度和稳定性要求也越来越高。CDN技术作为网络优化的重要手段&#xff0c;被越来越多的企业和网站所采用。现在我为大家介绍一下CDN的设计原理以及应用场景。 一.高防CDN技术概述 高防CDN是一种应用了高级防御技术的内容分发网络…

uni-app,nvue中text标签文本超出宽度不换行问题解决

复现&#xff1a;思路&#xff1a; 将text标签换为rich-text&#xff0c;并给rich-text增加换行的样式class类名解决&#xff1a;

C语言--不创建第三个变量,实现对两个数字的交换

我们先来看一下&#xff0c;创建第三个变量交换两个数字。 #include<stdio.h> {int a2;int b3;int tmp0;tmpa;ab;btmp;return 0; } 再看一下不创建的方法 法一&#xff1a; //加减法 缺点可能会溢出 int main() {int a3;int b5;printf("before:a%d b%d\n"…

PSNR计算

1.比较不同图像预处理方式对PSNR的影响 下面的代码是将单张图片喂入JSCC&#xff0c;计算PSNR。实验目的是&#xff1a;比较不同图像预处理方式对PSNR的影响。 PSNR定义如下 from torch.nn import MSELoss from PIL import Image img_PIL Image.open("/home/xxx/xxx/da…

HandBrake 1.7 近日发布

导读HandBrake 1.7 近日发布&#xff0c;作为这个开源、免费和跨平台视频转码器应用程序的重大更新&#xff0c;适用于 GNU/Linux、macOS 和 Windows 系统。 在 HandBrake 1.6 发布近一年后&#xff0c;HandBrake 1.7 版本为 Linux 用户提供了许多好处&#xff0c;包括视频摘要…

优思学院|质量工程师在汽车行业待遇好吗?

优思学院认为质量工程师在汽车行业的待遇有可能相对较好的。随着中国汽车品牌在国内市场的崛起&#xff0c;特别是在电动汽车领域的增长&#xff0c;质量工程师在保障产品质量和安全性方面变得非常重要。由于中国汽车制造商对产品质量的高度重视&#xff0c;质量工程师在制定和…

微信小程序埋点

使用如下代码封装一下&#xff0c;例如封装在log.js文件里面&#xff1a; var log wx.getRealtimeLogManager ? wx.getRealtimeLogManager() : nullmodule.exports {debug() {if (!log) returnlog.debug.apply(log, arguments)},info() {if (!log) returnlog.info.apply(l…

AC自动机(简单模板)

AC自动机&#xff0c;就相当于是在字典树上用kmp。next数组回退的位置为最大匹配字符串在字典树上的节点位置。 在获取字典树上的next数组的时候用的是BFS每次相当与处理的一层。 下图中红线为&#xff0c;可以回退的位置&#xff0c;没有红线的节点回退的位置都是虚拟原点。…

部署系列六基于nndeploy的深度学习 图像降噪unet部署

文章目录 1.直接在源代码demo中修改2. 如何修改呢&#xff1f; https://github.com/DeployAI/nndeploy https://nndeploy-zh.readthedocs.io/zh/latest/introduction/index.html 1.直接在源代码demo中修改 如果你想运行yolo5: onnxruntime:115ms ./install/lib/demo_nndeploy_…

阿里云OSS代码集成部分问题分析

公司内部开发了一个文件相关的应用&#xff0c;由于服务器带宽限制导致多个用户同时上传或者下载文件时速度很慢&#xff0c;遂将文件迁移至阿里云OSS服务器。下面是迁移的过程中遇到的部分问题。 问题1. 跨域错误 错误信息如下&#xff1a; Access to XMLHttpRequest at htt…

js检测dom变化的方法:MutationObserver

前言 检测一个原生dom的变化,如一个div的颜色,大小,所在位置,内部元素的属性是否变化,更深层dom树上的变化等等。 都可以使用一个window上暴露出来的一个api:MutationObserver 语法 官方地址:MutationObserver.MutationObserver() - Web API 接口参考 | MDN 使用new Mutat…

洗内裤的小洗衣机买啥牌子的?高质量内衣洗衣机推荐

清洗内衣内裤这些贴身衣物确实是一件比较头疼的事&#xff0c;有的小伙子由于工作的劳累通常在洗完澡后并不喜欢直接清洗内衣内裤&#xff0c;会存上几天再扔到洗衣机里&#xff0c;这样做是很不可取的&#xff0c;因为穿过的内裤很久不洗就会滋生细菌&#xff0c;另外&#xf…

一次爽个够,80款H5精品小游戏合集

前言 最近又找到了一款宝藏游戏资源分享给大家&#xff0c;包含 80 款 H5 精品小游戏&#xff0c;都是非常有趣味耐玩的游戏&#xff0c;比如植物大战僵尸、捕鱼达人、消消乐、斗地主、熊出没、飞机大战、象棋等等超级好玩的 H5 小游戏&#xff0c;让大家一次爽个够~ 本文讲解…

java spring-boot 修改打包的jar包名称

修改pom文件 <finalName>lzwd</finalName><build><finalName>lzwd</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plu…

JMeter测试报错422 Unprocessable Entity

添加HTTP信息头&#xff1a; ​ HTTP请求-》添加-〉配置元件-》HTTP信息头管理器 ​ 如果需要送json&#xff0c;需要添加Content-Type:application/json&#xff0c;否则会报【422 Unprocessable Entity】

Tomcat 配置

1&#xff1a; 打开 2&#xff1a;选择版本号&#xff0c;我这边是 1.7 3&#xff1a;添加 web 4: 添加jar包 5&#xff1a;添加 6&#xff1a;添加 Tomcat

待办委托超方便,流程审批效率大提升丨三叠云

流程委托 路径 我的流程 >> 我的待办 功能简介 我的流程增加「待办委托」功能&#xff0c;用户可以将待处理的流程审批委托他人处理。 应用场景&#xff1a; 如果当前审批人不方便审批时&#xff0c;可以委托给指定的人&#xff08;被委托人&#xff09;处理&#…

百分点科技入选《2023年央国企数字化升级研究报告》

近日&#xff0c;艾瑞咨询发布了《2023年央国企数字化升级研究报告》&#xff0c;报告总结了央国企数字化升级的方向和特点&#xff0c;并重点研究了基础平台及关键技术工具、通用及综合型应用、重要配套建设等方面。报告指出&#xff0c;数据治理是央国企数字化升级过程中的重…

2023-11-24 事业-代号s-行业数据研报网站-记录

摘要&#xff1a; 2023-11-24 事业-代号s-行业数据研报网站-记录 行业数据研报网站 1、萝卜投研&#xff1a;https://robo.datayes.com 看数据、下载研报、上市公司PE/PB研究等。2、镝数聚&#xff1a;www.dydata.io 全行业数据&报告查找下载平台&#xff0c;覆盖100行业报…

《洛谷深入浅出基础篇》P4715淘汰赛——二叉树

上链接&#xff1a;【深基16.例1】淘汰赛 - 洛谷https://www.luogu.com.cn/problem/P4715 上题干&#xff1a; 题目描述 有 2^n&#xff08;n≤7&#xff09;个国家参加世界杯决赛圈且进入淘汰赛环节。已经知道各个国家的能力值&#xff0c;且都不相等。能力值高的国家和能力值…