我在网站中使用 JPA。在探索了保存数据的选项之后,我发现了两种方法。第一种方法是使用
javax.persistence.EntityManager
的实现。我使用 LocalContainerEntityManagerFactoryBean
来实例化 EntityManager
的实例。一旦我获得了 EntityManager
的实例,我就可以用它来保存实体。例如,
entityManager.merge(someEntity);
另一种选择是使用
org.springframework.data.repository.CrudRepository
的实例。一,我获得一个 CrudRepository
的实例,我可以用它来保存一个实体。例如,
aCrudRepository.save(someEntity);
使用
EntityManager
和 CrudRepository
将实体持久保存到数据库中有什么区别?两种方法(实体管理器与 CRUD 存储库)的优点或缺点是什么?
Java/Spring 中有多个处理持久数据的层:
EntityManager
)Repository
)每个抽象都使开发人员免受较低级别细节的影响,但它可以 带来其自身的复杂性。 JdbcTemplate 是对普通 JDBC 的精简抽象。
Repository
是 EntityManager
的抽象。它保护开发者免受
一些复杂的细节通过 EntityManager
引入,并添加了样板代码和许多方便的方法。
例如,
CrudRepository
添加了findAll()
的实现,它非常常见,因此预定义它是有意义的。存储库有许多方便的方法,可以从方法名称(约定优于配置)、实体本身(按示例查询)生成查询。它们允许使用良好的类型安全 Fluent API 和 Query DSL,或者启用动态投影。
这两个界面提供了两种不同的方法:
org.springframework.data.repository.CrudRepository
是提供CRUD操作的存储库的通用接口。javax.persistence.EntityManager
与持久性相关
语境。 Spring 有自己的接口,它扩展了 CrudRepository
为此目的称为 JpaRepository
。我希望您了解持久 API 的优点或缺点。如果您不这样做,您可以阅读此问题的答案。