【问题标题】:Find/Modify/Save or Upsert with Spring Data R2DBC使用 Spring Data R2DBC 查找/修改/保存或 Upsert
【发布时间】:2020-04-03 04:10:04
【问题描述】:

我正在尝试围绕响应式编程,特别是 Spring 和 Spring Data R2DBC。可以帮助我更好地理解它的一件事是进行查找/修改/保存或 对象的“插入”。传统的交互可能如下所示:

Book save(Book book) {

   Book existing = repository.findByIsbn(book.getIsbn())

   if (existing != null) {
     return repository.save(found.copyMutableValuesFrom(book));
   }

   return repository.save(book);
}

这在 Monos 中看起来如何?我知道如何进行直接查找或直接保存,但更复杂的查找/更新/保存或 upsert 让我望而却步。

谢谢。

【问题讨论】:

    标签: java project-reactor spring-data-r2dbc r2dbc


    【解决方案1】:

    根据您的要求,它或多或少会这样。

    @Transactional
    Mono<Book> save(Book book){
        return repository.findByIsbn(book.getIsbn())
                        .flatMap(book -> repository.save(found.copyMutableValuesFrom(book)))
                        .switchIfEmpty(repository.save(book));  
    }
    
    1. ReactiveCrudRepository 在您调用 findById 时返回 Mono&lt;Book&gt;(类似于 Optional&lt;Book&gt; - 如果它是您的自定义方法,则使其返回 Mono&lt;Book&gt;
    2. 如果该书存在,则在我们更新现有书的地方执行第二条语句
    3. 如果未找到该书,则在我们保存新书的位置执行第三条语句。

    它返回一个Mono&lt;Book&gt;

    【讨论】:

    • 啊!这很简单,但我的小脑袋无法推断出来。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2020-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-04
    • 2020-05-06
    • 1970-01-01
    • 2023-03-15
    相关资源
    最近更新 更多