Find/Modify/Save 或更新插入 Spring 数据 R2DBC

Find/Modify/Save or Upsert with Spring Data R2DBC

我正在努力研究响应式编程,特别是 Spring 和 Spring Data R2DBC。可以帮助我更好地理解它的一件事是做一个 find/modify/save 或 "upsert" 一个对象。传统交互可能如下所示:

Book save(Book book) {

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

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

   return repository.save(book);
}

Monos 看起来如何?我了解如何直接查找或直接保存,但更复杂的 find/update/save 或 upsert 却让我望而却步。

谢谢。

根据您的要求,大致是这样的。

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

return是一个Mono<Book>