使用Speedment 3.0.17及更高版本简化了事务
交易次數(shù)
有時(shí)我們想確保我們的數(shù)據(jù)庫(kù)操作是原子執(zhí)行的,并且與其他操作分開。 這是交易起作用的地方。 交易是一組操作
數(shù)據(jù)庫(kù)可能接受或不接受作為原子操作的建議。 因此,要么接受交易中的所有操作,要么不接受交易中的所有操作。 事務(wù)的另一個(gè)優(yōu)點(diǎn)是,在事務(wù)開始時(shí),數(shù)據(jù)庫(kù)的狀態(tài)將在本地“凍結(jié)”,因此在事務(wù)中我們不會(huì)看到其他線程的更新。
Speedment是一個(gè)開源的Stream ORM Java工具包和Runtime Java工具,它將現(xiàn)有數(shù)據(jù)庫(kù)及其表包裝到Java 8流中。 Speedment的更高版本以易于使用的方式支持?jǐn)?shù)據(jù)庫(kù)事務(wù)。
更新
想象一下,我們正在編寫一個(gè)帶有帳戶的銀行應(yīng)用程序,然后將100美元從一個(gè)帳戶(1)轉(zhuǎn)移到另一個(gè)(2)。 在這種情況下,重要的是錢不要消失(即從1中扣除,但從未存入2),甚至更糟的是,將重復(fù)(即,以2存入但未從1扣除)。 可以使用以下Speedment數(shù)據(jù)庫(kù)事務(wù)來確保這一點(diǎn):
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(); } 當(dāng)方法
調(diào)用tx.commit() ,這兩個(gè)更新將自動(dòng)提交給數(shù)據(jù)庫(kù),并且對(duì)所有其他線程可見。 如果我們沒有顯式調(diào)用tx.commit()則事務(wù)將自動(dòng)回滾(即,更新將不起作用,將被丟棄)。
準(zhǔn)備工作
在使用事務(wù)之前,我們需要獲得一個(gè)TransactionHandler如下所示:
BankApplication app = ....TransactionComponent transactionComponent = app.getOrThrow(TransactionComponent.class);TransactionHandler txHandler = transactionComponent.createTransactionHandler(); 的
可以從應(yīng)用程序中檢索AccountManager ,如下所示:
下一步是什么?
在此處閱讀有關(guān)Speedment交易的更多信息 。
訪問GitHub并在此處閱讀有關(guān)Speedment開源的所有信息。
翻譯自: https://www.javacodegeeks.com/2017/11/transactions-made-simple-using-speedment-3-0-17.html
總結(jié)
以上是生活随笔為你收集整理的使用Speedment 3.0.17及更高版本简化了事务的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java程序设置jvm_Java程序员应
- 下一篇: 歌词我爱的是谁