簡體   English   中英

Spring Entity Manager 和 Spring Data Repository 之間有什么區別?

[英]What is the difference between an Spring Entity Manager and Spring Data Repository?

我在網站中使用 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
  • 數據庫模板
  • JPA(包含EntityManager
  • Spring Data JPA(包含Repository

每個抽象都使開發人員免受較低級別的細節的影響,但它也可能帶來其自身的復雜性。 JdbcTemplate 是對普通 JDBC 的一個瘦抽象。 Repository是對EntityManager的抽象。 它使開發人員免受EntityManager引入的一些復雜細節的影響,並添加了樣板代碼和許多方便的方法。

例如, CrudRepository添加了findAll()的實現,它非常常見,預定義它是有意義的。 存儲庫有許多方便的方法來從方法名稱(約定優於配置)、實體本身(按示例查詢)生成查詢。 它們允許在 Query DSL 中使用漂亮的類型安全 Fluent API 和/或啟用動態投影。

這兩個接口提供了兩種不同的方法:

  • org.springframework.data.repository.CrudRepository是提供 CRUD 操作的存儲庫的通用接口。
  • javax.persistence.EntityManager與持久化上下文相關聯。 JpaRepository ,Spring 有自己的接口,它擴展CrudRepository稱為JpaRepository

我希望您了解持久化 API 的優點或缺點。 如果你不這樣做,你可以閱讀這個問題的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM