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

标签 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 存储库)的优缺点是什么?

最佳答案

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

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

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

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

关于spring - Spring Entity Manager 和 Spring Data Repository 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14621495/

相关文章:

java - 捕获主线程中工作线程创建的异常

java - 使用@DirtiesContext BEFORE_CLASS 进行 Spring 启动测试

java - 延迟加载不起作用 - 我只需要父对象,而不是所有关联

Spring data MongoDB 将数组添加到现有文档

java - Spring寻找我没有使用java.sql.SQLSyntaxErrorException : Table 'meetings.meeting' doesn't exist创建的表

java - 每小时安排一次作业,每次 50 到 60 分钟一次

java - Spring 中的 @Service 与 @Component

java - JPA获取select中的上一条和下一条记录

java - 使用 JPA 创建树

elasticsearch - Spring Data Elasticsearch 的@Field 注释不起作用