1

我正在尝试围绕响应式编程,特别是 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 让我望而却步。

谢谢。

4

1 回答 1

4

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

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

它返回一个Mono<Book>

于 2020-04-03T14:10:37.967 回答