Java 使用Spring数据R2DBC查找/修改/保存或向上插入

Java 使用Spring数据R2DBC查找/修改/保存或向上插入,java,project-reactor,spring-data-r2dbc,r2dbc,Java,Project Reactor,Spring Data R2dbc,R2dbc,我正试着将我的头脑集中在反应式编程上,特别是使用Spring和Spring数据R2DBC。有一件事可以帮助我更好地理解它,那就是查找/修改/保存或 向上插入一个物体。传统的交互可能如下所示: Book save(Book book) { Book existing = repository.findByIsbn(book.getIsbn()) if (existing != null) { return repository.save(found.copyMutable

我正试着将我的头脑集中在反应式编程上,特别是使用Spring和Spring数据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会是什么样子?我知道如何进行直接查找或直接保存,但更复杂的查找/更新/保存或上传操作却让我难以理解


谢谢。

根据您的要求,或多或少都是这样

@Transactional
Mono<Book> save(Book book){
    return repository.findByIsbn(book.getIsbn())
                    .flatMap(book -> repository.save(found.copyMutableValuesFrom(book)))
                    .switchIfEmpty(repository.save(book));  
}
当您调用findByIdsomething(如可选)时,ReactiveCrudepository返回Mono-如果它是您的自定义方法,请使其返回Mono 如果书籍存在,则在更新现有书籍的地方执行第二条语句 如果找不到这本书,则在保存新书的地方执行第3条语句。
它返回一个Mono,根据您的要求,它或多或少都是这样的

@Transactional
Mono<Book> save(Book book){
    return repository.findByIsbn(book.getIsbn())
                    .flatMap(book -> repository.save(found.copyMutableValuesFrom(book)))
                    .switchIfEmpty(repository.save(book));  
}
当您调用findByIdsomething(如可选)时,ReactiveCrudepository返回Mono-如果它是您的自定义方法,请使其返回Mono 如果书籍存在,则在更新现有书籍的地方执行第二条语句 如果找不到这本书,则在保存新书的地方执行第3条语句。
它返回一个单声道

啊!这很简单,但我的小脑袋却无法推断。谢谢啊!!这很简单,但我的小脑袋却无法推断。谢谢