交易次数
在我以前的文章中,我写了关于如何使用Speedment轻松使用事务的方法,其中我们原子地更新了两个银行帐户。 众所周知,事务是一种将多个数据库操作组合到一个原子执行的单个操作中的方法。
但是事务不仅与更新数据库有关,而且还与执行原子读取有关。 借助Speedment,我们可以使用Java流自动地计算值,然后以一种简单的方式将结果返回到事务范围之外的内容。
返回交易值
假设我们有一个包含电影和艺术家的数据库(例如,使用MySQL的开源Sakila数据库内容),并且我们希望在一次交易中计算电影的数量加上数据库中艺术家的数量。 如果我们想在GUI或类似的工具中显示某种数据库大小,可能就是这种情况。 这可能是这样的:
long sumCount = txHandler.createAndApply(tx -> films.stream().count() + actors.stream().count());
当事务开始时,数据库的视图被“冻结”,因此在事务内看不到通过其他线程插入数据库的新电影或艺术家。 因此,我们可以安全地假定我们的视图不受其他线程的影响。
可以看出,使用非常少的样板代码,我们可以表达使用Speedment在事务内执行的功能。
准备工作
在使用事务之前,我们需要获得一个TransactionHandler
如下所示:
SakilaApplication app = ....TransactionComponent transactionComponent = app.getOrThrow(TransactionComponent.class);TransactionHandler txHandler = transactionComponent.createTransactionHandler();
可以从应用程序中检索FilmManager
和ActorManager
,如下所示:
FilmManager films = app.getOrThrow(FilmManager.class);ActorManager actors = app.getOrThrow(ActorManager.class);
在此处阅读有关Speedment交易的更多信息 。
下一步是什么?
访问GitHub上的 Speedment开源并尝试一下!
翻译自: https://www.javacodegeeks.com/2017/11/easily-return-values-transaction-speedment-3-0-17-later.html