2

阅读有关在 DAO 层中使用 Java 泛型的信息,我对在 spring 数据存储库中应用它有疑问。我的意思是,使用 spring 数据存储库,你有这样的东西:

  public interface OrderRepository extends CrudRepository<Order,OrderPK>{

  }

但是如果我有其他 10 个实体,我必须创建 10 个像上面那样的接口来执行 CRUD 操作等等,我认为这不是很可扩展。Java 泛型和 DAO 是关于创建一个接口和一个实现并将其重用于实体,但是对于 Spring Data 存储库,我必须为每个实体创建一个接口,所以......

4

1 回答 1

3

您并没有真正提出问题,所以我只是添加

这是真的吗?如果是这样,为什么?

并回答:

  1. 是的,这(几乎)是正确的。几乎,因为您不应该为每个实体创建一个存储库,而应该为每个聚合根创建一个存储库。见http://static.olivergierke.de/lectures/ddd-and-spring/

  2. Spring Data Repositories 提供了 Spring Data 需要知道的各种特性,它正在处理什么实体。例如查询方法需要知道实体的属性,以便将方法名称转换为基于 JPA 的查询。所以你必须在某个时候将信息传递给 Spring Data,你还必须传递信息,哪些实体应该被认为是聚合根。你这样做的方式是指定接口。

你真的需要那个吗?好吧,如果您想要的只是通用的 Crud 功能,那么您可以使用 JPA 直接开箱即用。但是如果你想要查询方法,分页、简单的原生查询和更多的 Spring Data 是避免大量样板代码的好方法。

请记住我有偏见

于 2017-03-20T10:17:03.080 回答