使用Speedment 3.0.17及更高版本简化了事务
交易次数
有时我们想确保我们的数据库操作是原子执行的,并且与其他操作分开。 这是交易起作用的地方。 交易是一组操作
数据库可能接受或不接受作为原子操作的建议。 因此,要么接受交易中的所有操作,要么不接受交易中的所有操作。 事务的另一个优点是,在事务开始时,数据库的状态将在本地“冻结”,因此在事务中我们不会看到其他线程的更新。
Speedment是一个开源的Stream ORM Java工具包和Runtime Java工具,它将现有数据库及其表包装到Java 8流中。 Speedment的更高版本以易于使用的方式支持数据库事务。
更新
想象一下,我们正在编写一个带有帐户的银行应用程序,然后将100美元从一个帐户(1)转移到另一个(2)。 在这种情况下,重要的是钱不要消失(即从1中扣除,但从未存入2),甚至更糟的是,将重复(即,以2存入但未从1扣除)。 可以使用以下Speedment数据库事务来确保这一点:
txHandler.createAndAccept(tx ->Account sender = accounts.stream().filter(Account.ID.equal(1)).findAny().get();Account receiver = accounts.stream().filter(Account.ID.equal(2)).findAny().get();accounts.update(sender.setBalance(sender.getBalance() - 100));accounts.update(receiver.setBalance(receiver.getBalance() + 100));tx.commit();
}
当方法
调用tx.commit()
,这两个更新将自动提交给数据库,并且对所有其他线程可见。 如果我们没有显式调用tx.commit()
则事务将自动回滚(即,更新将不起作用,将被丢弃)。
准备工作
在使用事务之前,我们需要获得一个TransactionHandler
如下所示:
BankApplication app = ....TransactionComponent transactionComponent = app.getOrThrow(TransactionComponent.class);TransactionHandler txHandler = transactionComponent.createTransactionHandler();
的
可以从应用程序中检索AccountManager
,如下所示:
AccountManager accounts = app.getOrThrow(AccountManager.class);
下一步是什么?
在此处阅读有关Speedment交易的更多信息 。
访问GitHub并在此处阅读有关Speedment开源的所有信息。
翻译自: https://www.javacodegeeks.com/2017/11/transactions-made-simple-using-speedment-3-0-17.html
使用Speedment 3.0.17及更高版本简化了事务相关推荐
- 使用Speedment 3.0.17及更高版本简化交易
交易次数 有时我们想确保我们的数据库操作是原子执行的,并且与其他操作分开. 这是交易起作用的地方. 交易是一组操作 数据库可能接受或不接受作为原子操作的建议. 因此,要么接受交易中的所有操作,要么不接 ...
- 从Speedment 3.0.17或更高版本的事务轻松返回值
交易次数 在我以前的文章中,我写了关于如何使用Speedment轻松使用事务的方法,其中我们原子地更新了两个银行帐户. 众所周知,事务是一种将多个数据库操作组合到一个原子执行的单个操作中的方法. 但是 ...
- 使用Speedion 3.0.17或更高版本轻松从事务中返回值
交易次数 在我以前的文章中,我写了关于如何使用Speedment轻松使用事务的方法,其中我们原子地更新了两个银行帐户. 众所周知,事务是一种将多个数据库操作组合到一个原子执行的单个操作中的方法. 但是 ...
- 棉花糖多少钱_如何在6.0棉花糖及更高版本中访问Android的正在运行的应用程序列表...
棉花糖多少钱 In Android 5.x and below, accessing your list of running apps was simple-you'd jump into Sett ...
- PostgreSQL 14及更高版本改进
PostgreSQL 14及更高版本 本文谈谈PG14中的关键特性及社区中正在谈论PG15及更高版本的内容. PG14的主要特性 逻辑复制的改进 PG14中对逻辑复制进行了几项增强: 1) 正在进行中 ...
- dock运行环境对linux的版本要求,Latte Dock 0.8发布,KDE Plasma 5.12或更高版本才能用...
现在可以下载最新版本Latte Dock 0.8了,它是一个基于图标的KDE桌面任务栏,目前可设置KDE商店共享和更多功能.如果你在使用Ubuntu 18.04可以安装旧版本的Latte Dock或者 ...
- 安装 vSphere Client 5.0 失败显示错误:此产品只能安装在 Win XP SP2 及更高版本上...
在 Windows 8 上安装 vSphere Client 5.0 时失败,并显示错误:此产品只能安装在 Windows XP SP2 及更高版本上 (2102145) Symptoms 免责声明: ...
- import python crash_import numpy在numpy版本1.16.0及更高版本时会导致Python崩溃
在Windows Server 2012上使用新安装的Python3.7.3 安装NumPy 1.16.0或更高版本时,import numpy会导致Python崩溃.降级到1.15.4解决了这个问题 ...
- android7.0模拟器调试,android - 为什么在android 7.0及更高版本上出现模拟器错误? - 堆栈内存溢出...
我正在开发将联系人保存在.vcf文件中的应用程序. 当我运行模拟器来测试应用程序时,我还会收到以下错误. 应用程序正在物理设备上运行. 但是android 7.0及更高版本的模拟器也给出了错误. (警 ...
最新文章
- Django博客系统(退出登录)
- UIKit 框架之UIActionSheet
- 【GDB调试学习笔记】GDB调试入门
- java可视化编程教程_JAVA可视化编程——SWING
- access 知乎 窗体_ACCESS数据可视化之路
- mysql图书管理系统设计答辩_基于微信的图书管理系统毕业论文+任务书+开题报告+答辩PPT+前后台(Java+Mysql)源码及数据库文件...
- c# 指定打开某个路径下的CMD_C# 插入、删除Excel分页符
- Go语言自学系列 | 安装Golang
- EA开发系列---技术指标的使用
- unity旗帜飘动shader
- JS如何判断包括IE11在内的IE浏览器
- 高效办公 1.2 用Python新建Excel文件
- latex IEEE单栏文章图片双栏目排列
- 【C/S通信交互之Socket篇】Cocos2dx(Client)使用BSD Socket与Mina(Server)手机网游通信框架!
- host管理工具SwitchHosts的使用
- python中的一些快捷键
- 9个免费开源的bug追踪软件 1
- python编程lcd显示_PyQt5快速上手基础篇2-按钮控制LCD屏显示
- excel批量排列图片到单元格的指定位置
- SpringCloud Bus 动态刷新遇见的500错误
热门文章
- P1791-[国家集训队]人员雇佣【最大权闭合图】
- ssl2346-联络员【图论,最小生成树】
- M. Monster Hunter(树形dp)
- [XSY] 传统游戏(DP、容斥)
- Full_of_Boys训练4总结
- L3-002 堆栈 树状数组+二分答案
- SpringCloud Gateway配置自定义路由404坑
- 大家都在说的分布式系统到底是什么
- JSP JavaBean
- 内存不足The following exception is caused by a lack of memory or swap, or not having swap