Spring 数据存储库和 DAO Java 泛型

Spring data repository and DAO Java Generics

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

  public interface OrderRepository extends CrudRepository<Order,OrderPK>{

  }

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

你没有真正提出问题,所以我只是补充

Is this really true? And if so, why?

并回答:

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

  2. Spring 数据存储库提供各种功能,Spring 数据需要了解这些功能,它正在处理的是什么实体。例如查询方法需要知道实体的属性,以便将方法名称转换为基于 JPA 的查询。因此,您必须在某个时候将信息传递给 Spring Data,并且还必须传递信息,哪些实体应被视为聚合根。你这样做的方法是指定接口。

你真的需要吗?好吧,如果您想要的只是通用的 Crud 功能,那么您可以直接使用 JPA 获得它。但是如果你想要查询方法、分页、简单的本机查询等等 Spring 数据是避免大量样板代码的好方法。

(请记住我有偏见)