Spring 数据存储库和 DAO Java 泛型

Posted

技术标签:

【中文标题】Spring 数据存储库和 DAO Java 泛型【英文标题】:Spring data repository and DAO Java Generics 【发布时间】:2017-08-08 01:36:05 【问题描述】:

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

  public interface OrderRepository extends CrudRepository<Order,OrderPK>

  

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

【问题讨论】:

Using generics in Spring Data JPA repositories的可能重复 【参考方案1】:

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

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

然后回答:

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

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

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

(请记住我有偏见)

【讨论】:

以上是关于Spring 数据存储库和 DAO Java 泛型的主要内容,如果未能解决你的问题,请参考以下文章

Spring + Hibernate DAO 作为泛型类

SpringJdbc持久层封装,Spring jdbcTemplate封装,springJdbc泛型Dao,Spring baseDao封装

关于 JPA 存储库和自动装配的 Java spring 问题

Java项目,bean类,dao包,service包,action包,现在想用action调用数据库中数据,数据在bean里有get set

在 Java 或 Grails 应用程序中动态创建实体、Spring 存储库和 facelets 页面

具有几何返回类型的 Spring 数据存储库和本机查询