java transaction 框架_Java 框架实战 springAOP 实现数据库事务操作

今天就是平安夜了

伙伴们都要平平安安的哈

那么开始今天的分享先来了解一下事务的概念:

事务是一系列作为一个逻辑单元来执行的操作的集合。它是数据库维护数据一致性的单位,它讲数据库从一个一致状态,转变为新的另外一个一致状态。

简单来说就是:对一组数据进行处理,要么所有操作都成功,要么全部都失败,这样就保证了数据始终一直的状态,维护了数据的完整和可靠性。

我们来做个小例子,模拟一下转账的流程。

先来写一下数据库

155043365_1_20190225031557506.png

数据库内容:

155043365_2_20190225031557599.png

来写一下 DAO 层的接口,两个操作数据库的方法,一个是增加钱数,一个是减少钱数

155043365_3_20190225031557646.png

实现这两个方法。

155043365_4_20190225031557709.jpg

在 service 层定义一个转账的方法

155043365_5_20190225031557849.png

转账操作的业务逻辑

155043365_6_20190225031557943.jpg

配置文件

155043365_7_2019022503155899.jpg

测试一下

155043365_8_20190225031558240.jpg

看一下数据库的结果:转账成功了

155043365_9_20190225031558506.png

这是程序正常运行,没有bug的情况,万一程序在转账的过程中出错了呢?

155043365_10_20190225031558537.jpg

程序出现了 bug 。再测试一下

155043365_11_20190225031558740.jpg

看一下数据库的结果

155043365_12_20190225031558912.png

我们总共是3000,现在张三和李四加起来是2900,转丢了100。现在你明白我们为什么要使用事务了吧!

事务的属性

原子性(atomicity):一个事务是一个不可分割的工作单位,事务中包括的所有操作要么都做,要么都不做。

一致性(consistency):事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。

隔离性(isolation):一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。

持久性(durability):持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

这四个属性通常称为 ACID 特性。利用 spring 基于 xml 配置实现事务。

事务原本是数据库中的概念,是在 dao 层,一般情况下,我们会把事务管理提升到的业务层 (service)。这是为了更好的是用事务来管理我们的业务逻辑,spring 并不直接管理事务,而是提供了多种事务管理器 jdbc (自定义封装jdbc,jdbctemplate,mybatis ) 使用:DataSourceTransactionManager

我们来配置一下:

引入jar,引入aop约束

aopalliance-1.0.jar

spring-aop-4.2.1.RELEASE.jar

spring-tx.jar

xml配置事务

155043365_13_20190225031558943.jpg

现在让我们来测试一下

155043365_14_2019022503155952.jpg

转账失败了,查看一下数据库

155043365_15_20190225031559240.png

没有使用事务时,转账过程中出现 bug,就会导致我们扣钱成功了,但是钱转入失败了,钱的总数就少了。

使用了事务之后,转账过程中程序出现 bug ,我们的扣除的钱可以回到原来的账户,不会造成损失。

各位我解释的还清楚吗?

平安夜快乐

拜拜!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值