Spring数据存储库和DAO Java Generics

时间:2017-03-16 17:56:17

标签: spring-data genericdao

关于在DAO层中使用Java Generics,我很怀疑在Spring数据存储库中应用它。我的意思是,对于spring数据库,你有类似的东西:

  public interface OrderRepository extends CrudRepository<Order,OrderPK>{

  }

但是,如果我有其他10个实体,我必须创建10个接口,如上所述,以执行CRUD操作等等,我认为这不是很可扩展。 Java Generics和DAO是关于创建一个接口和一个实现并为实体重用它,但是使用Spring Data存储库我必须为每个实体创建一个接口,所以......

1 个答案:

答案 0 :(得分:3)

你没有真正说出问题,所以我只想添加

  

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

并回答:

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

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

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

    请记住,我有偏见