繁体   English   中英

使用 Spring 数据 R2DBC 查找/修改/保存或更新插入

[英]Find/Modify/Save or Upsert with Spring Data R2DBC

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

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 让我望而却步。

谢谢。

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

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

它返回一个Mono<Book>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM