HasorDB 冲突策略

2022-01-10 10:04 更新

向数据库插入重复数据通常并非有意而为之,而一旦出现主键冲突就会比较麻烦。一般的解决办法是再次尝试按照主键更新或者放弃这条数据。

HasorDB 中对于这种情况可以配置冲突策略,这样就可以避免在写入数据时多余的代码逻辑。可选的冲突策略有三个(报错、替换、忽略)

报错​

报错是默认策略无需特别指定,这个策略下将会使用普通的 ​insert into​ 语句进行数据插入。

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

由于默认就是 ​into ​,因此下面这段代码和上面的是等价的

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

替换​

替换策略的实现是根据具体数据库 ​方言 ​实现决定

  • 对于 MySQL 将会使用 ​ON DUPLICATE KEY UPDATE ​字句修饰 insert。
  • 对于 Oracle 将会使用​ MERGE INTO ... WHEN MATCHED THEN ... WHEN NOT MATCHED THEN ... ​语句。
提示
是否支持以及实现形式,以数据库方言为准

使用 ​替换 ​策略只需要简单的设置一下策略属性

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

忽略​

忽略策略的实现是根据具体数据库 ​方言 ​实现决定

  • 对于 MySQL 将会使用​ INSERT IGNORE​ 语句。
  • 对于 Oracle 将会使用 ​MERGE INTO ... WHEN NOT MATCHED THEN ...​ 语句。
提示:
是否支持以及实现形式,以数据库方言为准。详情查看 分页与方言

使用 ​忽略 ​策略只需要简单的设置一下策略属性

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


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号