交易次数

有时我们想确保我们的数据库操作是原子执行的,并且与其他操作分开。 这是交易起作用的地方。 交易是一组操作

数据库可能接受或不接受作为原子操作的建议。 因此,要么接受交易中的所有操作,要么不接受交易中的所有操作。 事务的另一个优点是,在事务启动时,数据库的状态将在本地“冻结”,因此在事务中我们不会看到其他线程的更新。

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及更高版本简化交易相关推荐

  1. 使用Speedment 3.0.17及更高版本简化了事务

    交易次数 有时我们想确保我们的数据库操作是原子执行的,并且与其他操作分开. 这是交易起作用的地方. 交易是一组操作 数据库可能接受或不接受作为原子操作的建议. 因此,要么接受交易中的所有操作,要么不接 ...

  2. 从Speedment 3.0.17或更高版本的事务轻松返回值

    交易次数 在我以前的文章中,我写了关于如何使用Speedment轻松使用事务的方法,其中我们原子地更新了两个银行帐户. 众所周知,事务是一种将多个数据库操作组合到一个原子执行的单个操作中的方法. 但是 ...

  3. 使用Speedion 3.0.17或更高版本轻松从事务中返回值

    交易次数 在我以前的文章中,我写了关于如何使用Speedment轻松使用事务的方法,其中我们原子地更新了两个银行帐户. 众所周知,事务是一种将多个数据库操作组合到一个原子执行的单个操作中的方法. 但是 ...

  4. 棉花糖多少钱_如何在6.0棉花糖及更高版本中访问Android的正在运行的应用程序列表...

    棉花糖多少钱 In Android 5.x and below, accessing your list of running apps was simple-you'd jump into Sett ...

  5. PostgreSQL 14及更高版本改进

    PostgreSQL 14及更高版本 本文谈谈PG14中的关键特性及社区中正在谈论PG15及更高版本的内容. PG14的主要特性 逻辑复制的改进 PG14中对逻辑复制进行了几项增强: 1) 正在进行中 ...

  6. dock运行环境对linux的版本要求,Latte Dock 0.8发布,KDE Plasma 5.12或更高版本才能用...

    现在可以下载最新版本Latte Dock 0.8了,它是一个基于图标的KDE桌面任务栏,目前可设置KDE商店共享和更多功能.如果你在使用Ubuntu 18.04可以安装旧版本的Latte Dock或者 ...

  7. 安装 vSphere Client 5.0 失败显示错误:此产品只能安装在 Win XP SP2 及更高版本上...

    在 Windows 8 上安装 vSphere Client 5.0 时失败,并显示错误:此产品只能安装在 Windows XP SP2 及更高版本上 (2102145) Symptoms 免责声明: ...

  8. 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解决了这个问题 ...

  9. android7.0模拟器调试,android - 为什么在android 7.0及更高版本上出现模拟器错误? - 堆栈内存溢出...

    我正在开发将联系人保存在.vcf文件中的应用程序. 当我运行模拟器来测试应用程序时,我还会收到以下错误. 应用程序正在物理设备上运行. 但是android 7.0及更高版本的模拟器也给出了错误. (警 ...

最新文章

  1. JS:2.1,流程控制(if,switch)高级
  2. c语言在程序中显示现在星期几,C语言程序设计: 输入年月日 然后输出是星期几...
  3. 如何从一张图片里取出其中一部分_如何鉴别坑人的锌合金龙头
  4. java基础—网络编程———聊天窗口的建立
  5. mpacc和计算机硕士,考MPAcc还是工作?读研三年VS工作三年对比!
  6. 133个Java面试问题列表
  7. svn插件下载地址(用于eclipse、myeclipse的svn插件)
  8. PASCAL VOC数据集分析及下载、解压
  9. PHPWAMP自定义添加PHP版本教程,支持无限添加PHP和Mysql版本
  10. 最实用的网上赚钱方法:这7个方法真的很实用哦!
  11. mysql数据范围什么意思_MySQL数据库的数据类型以及取值范围详解
  12. 打开dbf时自动打开fxp_全新帕萨特打开点火开关后雨刮器会自动工作一次
  13. 安卓app里播放youtube视频
  14. Data Base学习记录:ODL
  15. 阿里天池课堂Python
  16. 计算机室内设计cad实践报告,cad室内设计实习报告
  17. NginxProxyManager实现unraid反向代理
  18. 心态不好的时候留给自己看
  19. 树莓派存储方案_树莓派搭建seafile存储重要文件
  20. 老闪创业那些事儿(38)——小龙的离职面谈

热门文章

  1. JavaFX UI控件教程(十三)之Table View
  2. XML解析(二),DOM解析XML
  3. Spring Boot Debug调试
  4. hibernate在分层架构中修改数据(update)时遇到的问题!!
  5. hibernate多对多、正向工程创建数据表——访问温馨提示
  6. 通过反射获取方法返回的类型
  7. python的三元运算
  8. java this用法_java中this用法小结
  9. django mysql 创建表_关于 django ORM 中,数据库建表方式的问题
  10. js 时间戳转换成时间_JavaScript 时间戳转成日期格式