使用 Speedment 3.0.17 及更高版本简化交易

位置:首页>文章>详情   分类: Java教程 > 编程技术   阅读(273)   2024-04-02 16:20:57

交易

有时我们希望确保我们的数据库操作以原子方式执行并与其他操作分开。这就是交易发挥作用的地方。事务是一组操作

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

Speedment 是一种开源 Stream ORM Java 工具包和运行时 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 开源的所有信息。

标签2: Java教程
地址:https://www.cundage.com/article/jcg-transactions-made-simple-using-speedment-3-0-17.html

相关阅读

Java HashSet 教程展示了如何使用 Java HashSet 集合。 Java哈希集 HashSet 是一个不包含重复元素的集合。此类为基本操作(添加、删除、包含和大小)提供恒定时间性...
SpringApplicationBuilder 教程展示了如何使用 SpringApplicationBuilder 创建一个简单的 Spring Boot 应用程序。 春天 是用于创建企业应...
通道是继 buffers 之后 java.nio 的第二个主要新增内容,我们在之前的教程中已经详细了解了这一点。通道提供与 I/O 服务的直接连接。 通道是一种在字节缓冲区和通道另一端的实体(通...
课程大纲 Elasticsearch 是一个基于 Lucene 的搜索引擎。它提供了一个分布式的、支持多租户的全文搜索引擎,带有 HTTP Web 界面和无模式的 JSON 文档。 Elasti...
解析器是强大的工具,使用 ANTLR 可以编写可用于多种不同语言的各种解析器。 在这个完整的教程中,我们将: 解释基础:什么是解析器,它可以用来做什么 查看如何设置 ANTLR 以便在 Java...
Java 是用于开发各种桌面应用程序、Web 应用程序和移动应用程序的最流行的编程语言之一。以下文章将帮助您快速熟悉 Java 语言,并迈向 API 和云开发等更复杂的概念。 1. Java语言...
Java中的继承是指子类继承或获取父类的所有非私有属性和行为的能力。继承是面向对象编程的四大支柱之一,用于提高层次结构中类之间的代码可重用性。 在本教程中,我们将了解 Java 支持的继承类型,...
Java Message Service 是一种支持正式通信的 API,称为 网络上计算机之间的消息传递。 JMS 为支持 Java 程序的标准消息协议和消息服务提供了一个通用接口。 JMS 提...
Java 项目中的一项常见任务是将日期格式化或解析为字符串,反之亦然。解析日期意味着你有一个代表日期的字符串,例如“2017-08-3”,你想把它转换成一个代表 Java 中日期的对象,例如Ja...
之前,我介绍了spring 3 + hibernate 集成 示例和struts 2 hello world 示例。在本教程中,我将讨论在将 spring 框架与 struts 与 hibern...