52

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

entityManager.merge(someEntity);

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

aCrudRepository.save(someEntity);

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

4

2 回答 2

38

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

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

每个抽象都使开发人员免受较低级别的细节的影响,但它也可能带来其自身的复杂性。JdbcTemplate 是对普通 JDBC 的精简抽象。 Repository是对 的抽象EntityManager。它使开发人员免受引入的一些复杂细节的影响,EntityManager并添加了样板代码和许多方便的方法。

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

于 2019-05-29T16:33:18.187 回答
31

这两个接口提供了两种不同的方法:

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

我希望你知道持久化 API 的好处或坏处。如果你不这样做,你可以阅读这个问题的答案。

于 2013-01-31T08:58:13.043 回答