Spring Entity Manager 和 Spring Data Repository 有什么区别?

问题描述 投票:0回答:2

我在网站中使用 JPA。在探索了保存数据的选项之后,我发现了两种方法。第一种方法是使用

javax.persistence.EntityManager
的实现。我使用
LocalContainerEntityManagerFactoryBean
来实例化
EntityManager
的实例。一旦我获得了
EntityManager
的实例,我就可以用它来保存实体。例如,

entityManager.merge(someEntity);

另一种选择是使用

org.springframework.data.repository.CrudRepository
的实例。一,我获得一个
CrudRepository
的实例,我可以用它来保存一个实体。例如,

aCrudRepository.save(someEntity);

使用

EntityManager
CrudRepository
将实体持久保存到数据库中有什么区别?两种方法(实体管理器与 CRUD 存储库)的优点或缺点是什么?

java spring jpa spring-data-jpa spring-data
2个回答
59
投票

Java/Spring 中有多个处理持久数据的层:

  • JDBC
  • Jdbc模板
  • JPA(包含
    EntityManager
  • Spring Data JPA(包含
    Repository

每个抽象都使开发人员免受较低级别细节的影响,但它可以 带来其自身的复杂性。 JdbcTemplate 是对普通 JDBC 的精简抽象。

Repository
EntityManager
的抽象。它保护开发者免受 一些复杂的细节通过
EntityManager
引入,并添加了样板代码和许多方便的方法。

例如,

CrudRepository
添加了
findAll()
的实现,它非常常见,因此预定义它是有意义的。存储库有许多方便的方法,可以从方法名称(约定优于配置)、实体本身(按示例查询)生成查询。它们允许使用良好的类型安全 Fluent API 和 Query DSL,或者启用动态投影。


33
投票

这两个界面提供了两种不同的方法:

  • org.springframework.data.repository.CrudRepository
    是提供CRUD操作的存储库的通用接口。
  • javax.persistence.EntityManager
    与持久性相关 语境。 Spring 有自己的接口,它扩展了
    CrudRepository
    为此目的称为
    JpaRepository

我希望您了解持久 API 的优点或缺点。如果您不这样做,您可以阅读此问题的答案。

© www.soinside.com 2019 - 2024. All rights reserved.