Day14 基于AOP的声明式事务控制

18 篇文章 1 订阅
订阅专栏

1 Spring 事务编程概述

PlatformTransactionManager +TransactionDefinition = TransactionStatus

2 搭建环境

  • 数据库准备一个账户表tb account;

  • dao层准备一个AccountMapper,包括incrMoney和decrMoney两个方法;service层准备一个transferMoney方法,分别调用incrMoney和decrMoney方法

  • 在applicationContext文件中进行Bean的管理配置

  • 测试正常转账与异常转账

数据库

CREATE TABLE `tb_accout` (
  `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '主键自增',
  `account_name` VARCHAR(32) COMMENT '账户名称',
  money INT COMMENT '金额'
);

INSERT INTO tb_accout(account_name,money) VALUE('tom',5000);
INSERT INTO tb_accout(account_name,money) VALUE('lucy',5000);

mapper

/**
 * @author : msf
 * @date : 2023/1/28
 */
@Mapper
public interface AccountMapper {
    void incrMoney(@Param("accountName") String accountName, @Param("money")Integer money);

    void decrMoney(@Param("accountName") String accountName, @Param("money")Integer money);
}

Service

public interface AccountService {
    void transferMoney(String outAccount, String inAccount, Integer money);
}
@Service("accountService")
public class AccountServiceImpl implements AccountService {

    @Autowired
    private AccountMapper accountMapper;

    @Override
    public void transferMoney(String outAccount, String inAccount, Integer money) {
        accountMapper.decrMoney(outAccount,money);
        accountMapper.incrMoney(inAccount,money);
    }
}

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: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
       http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop.xsd
       ">

    <!--注解组件扫描:扫描指定的基本包及其子包下的类,识别使用@Component注解-->
    <context:component-scan base-package="org.example"/>

    <context:property-placeholder location="classpath:jdbc.properties"/>
    <!--配置数据源信息-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${jdbc.driver}"></property>
        <property name="url" value="${jdbc.url}"></property>
        <property name="username" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>

    <!--    配置SqlSessionFactoryBean,作用将SqlSessionFactory存储到spring容器-->
    <bean class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

    <!--    MapperScannerConfigurer,作用扫描指定的包,产生Mapper对象存储到Spring容器-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="org.example.mapper"></property>
    </bean>
</beans>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.example.mapper.AccountMapper">
    <update id="incrMoney">
        update tb_accout set money = money +  #{money} where account_name = #{accountName}
    </update>

    <update id="decrMoney">
        update tb_accout set money = money -  #{money} where account_name = #{accountName}
    </update>
</mapper>

结果

3 基于xml声明式事务控制

在业务层进行事务控制;

<!--配置事务平台管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <!--配置spring 提供好的advisor-->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <!--事务属性配置,任意方法都需要默认的事务属性-->
            <tx:method name="*"/>
        </tx:attributes>
    </tx:advice>
    
    <!--事务增强的aop-->
    <aop:config>
        <aop:pointcut id="txPointcut" expression="execution(* org.example.service..*.*(..))"/>
        <!--配置织入 spring提供好的通知-->
        <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>
    </aop:config>

事务的传播行为

4 基于注解声明式事务控制

@Transaction

@EnableTransactionManagement 相当于注解扫描

Spring学习day_04JdbcTemplateAOP基于XML注解声明式事务控制XMl注解编程式事务
chenchen818的博客
10-21 148
Spring中的JdbcTemplate JdbcTemplate的作用: 他就是用于和数据库交互的,实现对表的CRUD操作 如何创建该对象:public static void main(String[] args) { //准备数据源:spring的内置数据源 DriverManagerDataSource ds = new DriverManagerDataSour...
day10:声明式事务控制
卓汶的博客
07-23 460
Spring声明式事务顾名思义就是采用声明的方式来处理事务。这里所说的声明,就是指在配置文件中声明,用在Spring配置文件中声明式的处理事务来代替代码式的处理事务。
Spring 基于XML或注解的声明式事务控制
weixin_43347737的博客
12-15 293
Spring 基于XML或注解的声明式事务控制基于XML的声明式事务控制声明式事务控制的代码准备Spring 基于xml的声明式事务控制的步骤基于注解的声明式事务控制 基于XML的声明式事务控制 声明式事务控制的代码准备 包的结构 dao包 package com.itheima.dao; import com.itheima.domain.Account; /** * 账户的持久层接口 */ public interface IAccountDao { /** * 根据Id查
Java回顾:springAOP声明式事务
m0_56678122的博客
11-30 301
Java回顾:springAOP声明式事务
Spring基于 XML 的声明式事务控制(配置方式)
L-李俊漩的博客
05-28 2176
一、引入依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="ht...
spring基于注解的声明式事务控制
weixin_40055163的博客
09-10 119
spring基于注解的声明式事务控制 1.打开IDEA的界面如图所示:点击Create New Project. 2.选择Maven工程和JDK的版本,并点击Next。如图所示: 3.填写项目名称和保存的地址,如图所示。点击Finish。 4.导入相应依赖jar包的代码如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi
Day167.声明式事务 -Spring注解驱动
阿昌爱Java
01-18 248
Spring注解驱动 声明式事务 一、环境搭建 1、导入相关依赖 ​ 数据源、数据库驱动、Spring-jdbc模块 2、配置数据源、JdbcTemplate(Spring提供的简化数据库操作的工具)操作数据库 导入相关依赖: <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9
Day127.声明式事务 -Spring
阿昌爱Java
12-09 406
声明式事务 一、事务概述 在JavaEE企业级开发的应用领域,为了保证数据的完整性和一致性,必须引入数据库事务的概念,所以事务管理是企业级应用程序开发中必不可少的技术 事务就是一组由于逻辑上紧密关联而合并成一个整体(工作单元)的多个数据库操作,这些操作要么都执行,要么都不执行。 事务的四个关键属性(ACID) 原子性:事务的原子性要求事务中的所有操作要么都执行,要么都不执行。 一致性:所有数据都处于满足业务规则的一致性状态。 隔离性:隔离性原则要求多个事务在并发执行过程中不会互相干扰 持久
day04 spring 声明式事务
Libra_97的博客
11-20 518
spring 声明式事务
day4-Spring JdbcTemplate & 声明式事务.md
10-15
总结而言,JdbcTemplate为开发者提供了一个便捷的方式来处理数据库操作,而声明式事务管理则使得事务控制变得更加简单、灵活。通过结合使用这两种技术,我们可以构建出高效、健壮的企业级应用程序。
Spring aop、jdbc和事务tx练习
11-08
声明式事务管理允许开发者在配置文件中声明哪些方法需要在事务中运行,而无需在代码中显式管理开始和结束事务。这通常通过@Transactional注解实现,可以应用于类或方法级别。编程式事务管理则需要在代码中手动调用...
Spring基于 XML 的声明式事务控制入门(演示转账操作)
QAQ
01-14 209
一、先介绍编程式的事务先: 二、申明式事务: 步骤: ① 引入tx命名空间 ② 配置事务增强 ③ 配置事务 AOP 织入 ④ 测试事务控制转账业务代码 pom.xml: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
Java企业面试题3
m0_74972727的博客
09-15 894
1. break和continue的作用(智*图) break:用于完全退出一个循环(如 for, while)或一个 switch 语句。当在循环体内遇到break语句时,程序会立即跳出当前循环体,继续执行循环之后的代码。 continue:用于跳过当前循环体中剩余的部分,并开始下一次循环。如果是在 for 循环中使用continue,则会直接进行条件判断以决定是否执行下一轮循环。 2. if分支语句和switch分支语句的异同之处(智*图) 相同点:都是用来根据不同的条件执行不同的代码块。
Arthas sysenv(查看JVM的环境变量)
最新发布
刘大猫
09-21 194
Arthas sysenv(查看JVM的环境变量)
Java 发布jar包到maven中央仓库(2024年9月保姆级教程)
一碗清深的博客
09-18 241
将本文介绍将 jar 包上传到中央仓库,并在 mvnrepository 中可查找到。发布的仓库源地址不同,操作步骤和难度也不同,本文将以一种作者认为最简单的方式来进行发布。
JDK17新增语法特性
2201_76124988的博客
09-20 524
springboot3.0开始,已经不支持JDK8,转变为JDK17参考资料:官方博客。
faiss安装 (CPU版本)
CSDN_WHB的博客
09-20 177
faiss版本 faiss-v1.7.4。
Java项目: 基于SpringBoot+mybatis+maven课程答疑系统(含源码+数据库+毕业论文)
weixin_43860634的博客
09-14 917
Java项目: 基于SpringBoot+mybatis+maven课程答疑系统(含源码+数据库+毕业论文)
springaop声明式事务失效
09-07
Spring AOP声明式事务失效的主要原因有以下几种情况: 1. 非public方法失效:只有标注在public级别的方法上的@Transactional才会生效。因为Spring AOP不支持对private、protected方法进行拦截。声明@Transactional的...
写文章

热门文章

  • Python 之CV2详解 45150
  • 何为线性时不变系统!详解 24758
  • 希尔伯特变换 14953
  • 详解傅里叶变换与拉普拉斯,Z变化的联系 14898
  • 模型评估——混淆矩阵confusion_matrix 12153

分类专栏

  • 通信仿真和学习 10篇
  • Java 18篇
  • 设计模式 20篇
  • 牛客网项目 2篇
  • Spring 18篇
  • 算法 60篇
  • 操作系统 2篇
  • 面试题 16篇
  • 计算机网络 3篇
  • C++ 1篇
  • Java面试 7篇
  • JVM虚拟机 9篇
  • Rpc设计 1篇
  • Netty 3篇
  • Java并发 16篇
  • Redis 23篇
  • Zookeeper 4篇
  • MySQL数据库 25篇
  • 通信中的数学变换 2篇
  • GUI设计 2篇
  • MATLAB 3篇
  • 水声通信 1篇
  • Python 13篇
  • pytorch 14篇
  • 深度学习 19篇
  • python 库 1篇
  • Tensorflow 1篇

最新评论

  • 寒假通信学习

    夜暮花零: 可惜看到太晚了,导师放养自己摸索了好久

  • 寒假通信学习

    Muisti: 博主是继续读博吗?现在还可以不,我加你吗?

  • 模型评估——混淆矩阵confusion_matrix

    喆511: 开头写错了吧?

  • 寒假通信学习

    兜兜转转m: 现在也还行。

  • 寒假通信学习

    Muisti: 才看见哭了表情包

大家在看

  • 翻阅资料,关于新手解ctf密码题的总结 270
  • 2024年CSP-J1认证真题和答案解析 176
  • 翻阅资料,对等保2.0的一些浅显理解 389
  • 阿里新开源的项目,性能提升200%,号称再战十年的JSON库(带私活源码) 1580
  • 论文翻译:AAAI-2024.Li C.CCF-A.Task Contamination: Language Models May Not Be Few-Shot Anymore

最新文章

  • 寒假通信学习
  • 智能反射面——恒模约束及代码实现
  • Java重修第十天—代码进阶
2024年19篇
2023年75篇
2022年132篇
2021年27篇
2020年12篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兜兜转转m

一毛钱助力博主实现愿望

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值

深圳SEO优化公司网站收录优化的成本如何给网站优化太仓网站优化企业做移动网站优化软件哪家网站优化服务好网站优化怎么做 百度文库唐山网站优化哪家信誉好大良网站优化优势站内优化帮助网站怎么用网站dns怎么优化梧州网站优化营商环境安吉网站seo优化关键词密云网站优化排名推广武汉外贸网站优化档案馆网站性能优化宣城企业网站排名优化哪家实惠长安网站关键词优化价格蚌埠网络推广网站优化排名网站外链优化工作网站排名优化タ来宙斯参考山东优化网站多少钱安徽网站如何优化福建省网站优化一般需要多少钱深圳科技网站优化深圳网站seo关键词优化方法网站优化注意网站底部优化字案例沈阳seo网站优化甘南网站优化推广找哪个公司金华专业网站优化报价歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化