了解 Spring Data 接口

Posted

技术标签:

【中文标题】了解 Spring Data 接口【英文标题】:Understanding Spring Data interfaces 【发布时间】:2016-03-10 18:47:29 【问题描述】:

我对一些基本的 Spring Data 概念有点困惑。

据我所知,典型的 DAO 层级结构如下所示:

   - dao
     - MyFirstObjectDao
     - MySecondObjectDao
     - jpa
        - MyFirstObjectDaoImpl
     - jdbc
        - MySecondObjectDaoImpl

有了这个概念,我可以使用 JPA 作为我的第一个 DAO 接口的实现,而 JDBC - 用于第二个。

现在我想了解 Spring Repository 抽象。例如,每个 Spring Data 教程都指定我应该有一个接口,该接口应该从 JpaRepository 扩展。所以有了这个界面,我已经用 JPA 锁定了,对吧?

如果我想提供不同的实现,比如 DAO 中的 jpa/jdbc,该怎么办?

【问题讨论】:

【参考方案1】:

通常没有很好的理由为相同的对象混合 JPA 和 JDBC 持久性;如果您已经将所有内容都注释为 JPA 实体,那么您不妨在各处使用相同的持久性设置。您应该重新考虑为什么要这样做。

也就是说,如果你真的需要,你可以这样做:

interface FooBaseRepository extends PagingAndSortingRepository<Long, Foo> 
interface FooJpaRepository extends FooBaseRepository, JpaRepository<Long, Foo> 
interface FooJdbcRepository extends FooBaseRepository, JdbcRepository<Long, Foo> 

@Autowired FooBaseRepository surpriseRepository

更新:如果您只是在谈论为不同的类(没有关系)设置不同的持久性策略,没有什么特别复杂的。您可以混合使用 JpaJdbc 存储库;它们只是接口。

【讨论】:

好的,谢谢。但在我的问题中,我并不是要为同一个对象混合不同的持久性。我写了 MyFirstObjectDao 和 MySecondObjectDao。所以,你是说,在 Spring Data 方法中,我不应该将目录拆分为 jpa/jdbc?可以有 MyFirstObjectRepository(扩展 JpaRepository)和 MySecondObjectRepository(扩展 CrudRepository)吗?

以上是关于了解 Spring Data 接口的主要内容,如果未能解决你的问题,请参考以下文章

Spring Data 系列学习Spring Data JPA 基础查询

Spring Data 之 Repository 接口

Spring Data JPA 简单查询-接口方法

Spring -Data MongoDB问题与作为接口的字段

Spring Data JPA 简单查询--接口方法(没细看)

Spring Data JPA的Respository接口中查询方法