Spring实体管理器和Spring Data Repository之间有什么区别?

时间:2013-01-31 08:36:49

标签: spring jpa spring-data spring-data-jpa

我在网站上使用JPA。在探索了保存数据的选项后,我找到了2种方法。第一种方法是使用javax.persistence.EntityManager的实现。我使用LocalContainerEntityManagerFactoryBean来实例化EntityManager的实例。一旦我获得了EntityManager的实例,我就可以用它来保存实体。例如,

entityManager.merge(someEntity);

另一种选择是使用org.springframework.data.repository.CrudRepository的实例。一,我获得了一个CrudRepository的实例,我可以用它来保存一个实体。例如,

aCrudRepository.save(someEntity);

使用EntityManager和CrudRepository将实体持久化到数据库之间有什么区别?这两种方法(实体管理器与crud存储库)有什么好处或缺点?

2 个答案:

答案 0 :(得分:19)

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

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

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

答案 1 :(得分:0)

在Java / Spring中,处理持久性数据有几层:

  • JDBC
  • JdbcTemplate
  • JPA(包含EntityManager
  • Spring Data JPA(包含Repository

每个抽象都可以使开发人员免受某些爱好者级别的细节的影响,但是它可以 带来自己的复杂性。 JdbcTemplate是纯JDBC的精简抽象。 Repository是对EntityManager的抽象。它使开发人员免受 EntityManager引入了一些复杂的细节,并增加了样板代码和许多便捷的方法。

例如,CrudRepository添加了findAll()的实现,这种实现是如此普遍,以至于可以预定义它。存储库具有许多方便的方法,可从实体本身(通过示例查询)根据方法名称(通过配置进行约定)生成查询。它们允许在查询DSL中使用漂亮的类型安全Fluent API,或者启用动态投影。