java - 使用 Spring Data R2DBC 查找/修改/保存或更新插入

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

我正在努力研究响应式编程,特别是 Spring 和 Spring Data R2DBC。可以帮助我更好地理解它的一件事是进行查找/修改/保存或 一个对象的“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 会怎样?我了解如何直接查找或直接保存,但我无法进行更复杂的查找/更新/保存或更新插入。

谢谢。

最佳答案

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

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

它返回一个 Mono<Book>

关于java - 使用 Spring Data R2DBC 查找/修改/保存或更新插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61004958/

相关文章:

java - react 堆 : How to convert a Flux of entities into a Flux of DTO objects

java - r2dbc-pool 连接取消后未释放

spring-webflux - 连接重用和事务(关系)

java - 在 liferay 主题中使用 java 类?

java.lang.IllegalStateException : Location is not set

java - SQL 匹配字符串

java - 实现 Cloneable 接口(interface)如何允许克隆对象,因为它是一个标记接口(interface)并且没有任何方法?

project-reactor - 用于阻塞 I/O 任务的 ParallelFlux 与 flatMap()

java - Reactor Core - Mono - onError Flatmap

java - INSERT 不包含 spring-data-r2dbc 的值