HasorDB 沖突策略

2022-01-10 10:04 更新

向數(shù)據(jù)庫(kù)插入重復(fù)數(shù)據(jù)通常并非有意而為之,而一旦出現(xiàn)主鍵沖突就會(huì)比較麻煩。一般的解決辦法是再次嘗試按照主鍵更新或者放棄這條數(shù)據(jù)。

HasorDB 中對(duì)于這種情況可以配置沖突策略,這樣就可以避免在寫(xiě)入數(shù)據(jù)時(shí)多余的代碼邏輯??蛇x的沖突策略有三個(gè)(報(bào)錯(cuò)、替換、忽略)

報(bào)錯(cuò)?

報(bào)錯(cuò)是默認(rèn)策略無(wú)需特別指定,這個(gè)策略下將會(huì)使用普通的 ?insert into? 語(yǔ)句進(jìn)行數(shù)據(jù)插入。

TestUser testUser = ...
LambdaInsert<TestUser> insert = lambdaTemplate.lambdaInsert(TestUser.class);
int result = insert.applyEntity(testUser).executeSumResult();

由于默認(rèn)就是 ?into ?,因此下面這段代碼和上面的是等價(jià)的

TestUser testUser = ...
LambdaInsert<TestUser> insert = lambdaTemplate.lambdaInsert(TestUser.class);
int result = insert.applyEntity(testUser)
                   .onDuplicateStrategy(DuplicateKeyStrategy.Into)
                   .executeSumResult();

替換?

替換策略的實(shí)現(xiàn)是根據(jù)具體數(shù)據(jù)庫(kù) ?方言 ?實(shí)現(xiàn)決定

  • 對(duì)于 MySQL 將會(huì)使用 ?ON DUPLICATE KEY UPDATE ?字句修飾 insert。
  • 對(duì)于 Oracle 將會(huì)使用? MERGE INTO ... WHEN MATCHED THEN ... WHEN NOT MATCHED THEN ... ?語(yǔ)句。
提示
是否支持以及實(shí)現(xiàn)形式,以數(shù)據(jù)庫(kù)方言為準(zhǔn)

使用 ?替換 ?策略只需要簡(jiǎn)單的設(shè)置一下策略屬性

TestUser testUser = ...
LambdaInsert<TestUser> insert = lambdaTemplate.lambdaInsert(TestUser.class);
int result = insert.applyEntity(testUser)
                   .onDuplicateStrategy(DuplicateKeyStrategy.Update)
                   .executeSumResult();

忽略?

忽略策略的實(shí)現(xiàn)是根據(jù)具體數(shù)據(jù)庫(kù) ?方言 ?實(shí)現(xiàn)決定

  • 對(duì)于 MySQL 將會(huì)使用? INSERT IGNORE? 語(yǔ)句。
  • 對(duì)于 Oracle 將會(huì)使用 ?MERGE INTO ... WHEN NOT MATCHED THEN ...? 語(yǔ)句。
提示:
是否支持以及實(shí)現(xiàn)形式,以數(shù)據(jù)庫(kù)方言為準(zhǔn)。詳情查看 分頁(yè)與方言

使用 ?忽略 ?策略只需要簡(jiǎn)單的設(shè)置一下策略屬性

TestUser testUser = ...
LambdaInsert<TestUser> insert = lambdaTemplate.lambdaInsert(TestUser.class);
int result = insert.applyEntity(testUser)
                   .onDuplicateStrategy(DuplicateKeyStrategy.Ignore)
                   .executeSumResult();


以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)