了解 Spring 数据接口

Understanding Spring Data interfaces

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

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

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

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

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

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

通常没有很好的理由想要将 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 存储库;它们只是接口。