13.2.2 定义响应式 MongoDB Repository

现在我们需要定义两个 Repository,一个用于 TacoOrder 聚合根,另一个用于 Ingredient。我们不需要 Taco 的 Repository,因为它是 TacoOrder 的一个属性。

您现在应该已经熟悉 IngredientRepository 接口:

package tacos.data;

import org.springframework.data.repository.reactive.ReactiveCrudRepository;
import org.springframework.web.bind.annotation.CrossOrigin;

import tacos.Ingredient;

@CrossOrigin(origins="*")
public interface IngredientRepository
      extends ReactiveCrudRepository<Ingredient, String> {
}

此 IngredientRepository 接口与我们在第 4 章中定义的略有不同,它扩展了 ReactiveCrudRepository,而不是扩展 CrudRepository。且与我们为 Spring Data R2DBC 持久化创建的 Repository 也不一样,不同之处在于它没有 findBySlug() 方法。

同样,OrderRepository 与我们在第 4 章中创建的几乎相同:

package tacos.data;

import org.springframework.data.domain.Pageable;
import org.springframework.data.repository.reactive.ReactiveCrudRepository;

import reactor.core.publisher.Flux;
import tacos.TacoOrder;
import tacos.User;

public interface OrderRepository
      extends ReactiveCrudRepository<TacoOrder, String> {

  Flux<TacoOrder> findByUserOrderByPlacedAtDesc(
      User user, Pageable pageable);

}

最后,响应式和非响应式 MongoDB Repository 之间的唯一区别是:它们是否扩展为 ReactiveCrudRepository。在选择扩展 ReactiveCrudRepository 时,这些 Repository 的客户端必须准备好处理响应类型,如 Flux 和 Mono。这一点在我们编写响应式测试时变得显而易见,这是我们下一步要做的。

results matching ""

    No results matching ""