codecamp

HasorDB 冲突策略

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

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();


HasorDB CRUD条件构造器
HasorDB 不安全的操作
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }