我正在努力研究响应式编程,特别是 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));
}
- ReactiveCrudRepository 返回
Mono<Book>
当你调用 findById(类似于Optional<Book>
- 如果它是你的自定义方法,让它返回Mono<Book>
) - 如果这本书存在,则在我们更新现有书的地方执行第二条语句
- 如果找不到这本书,则在我们保存新书的地方执行第 3 条语句。
它返回一个 Mono<Book>
关于java - 使用 Spring Data R2DBC 查找/修改/保存或更新插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61004958/