了解 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
更新:如果您只是在谈论为不同的类(没有关系)设置不同的持久性策略,没有什么特别复杂的。您可以混合使用 Jpa
和 Jdbc
存储库;它们只是接口。
【讨论】:
好的,谢谢。但在我的问题中,我并不是要为同一个对象混合不同的持久性。我写了 MyFirstObjectDao 和 MySecondObjectDao。所以,你是说,在 Spring Data 方法中,我不应该将目录拆分为 jpa/jdbc?可以有 MyFirstObjectRepository(扩展 JpaRepository)和 MySecondObjectRepository(扩展 CrudRepository)吗?以上是关于了解 Spring Data 接口的主要内容,如果未能解决你的问题,请参考以下文章
Spring Data 系列学习Spring Data JPA 基础查询
Spring -Data MongoDB问题与作为接口的字段