当前位置: 首页 > 知识库问答 >
问题:

Spring Entity Manager和Spring Data Repository之间的区别是什么?

漆雕奇
2023-03-14

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

entityManager.merge(someEntity);

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

aCrudRepository.save(someEntity);

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

共有2个答案

寿卜鹰
2023-03-14

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

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

我希望您了解持久API的优点或缺点。如果你不知道,你可以阅读这个问题的答案。

程俊健
2023-03-14

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

  • JDBC
  • Jd bc模板
  • JPA(包含EntityManager
  • Spring Data JPA(包含存储库

每种抽象都使开发人员免受底层细节的影响,但它也可能带来自身的复杂性。JdbcTemplate是对普通JDBC的抽象。< code>Repository是对< code>EntityManager的抽象。它为开发人员屏蔽了< code>EntityManager引入的一些复杂细节,并添加了样板代码和许多方便的方法。

例如,< code>CrudRepository添加了< code>findAll()的实现,这种实现非常常见,预定义它是有意义的。存储库有许多方便的方法来从方法名(约定优于配置)、从实体本身(通过示例查询)生成查询。它们允许在查询DSL中使用良好的类型安全流畅的API,或者启用动态投影。

 类似资料:
  • 在Java 7之前,JVM内存中有一个名为PermGen的区域,JVM以前在这里保存它的类。在Java 8中,它被移除并被称为元空间的区域所取代。 PermGen和Metaspace之间最重要的区别是什么? 我知道的唯一区别是,并且忽略了VM参数。

  • 和之间有什么区别? 是什么原因导致他们被扔?如何解决这些问题? 在修改现有代码以包含新的jar文件时,我经常会遇到这些可抛物。我在通过WebStart发布的一个Java应用程序的客户端和服务器端都碰到了它们。 我遇到的可能原因是: 代码客户端的中未包含的包 我们正在使用的新JAR缺少运行时类路径 版本与以前的JAR冲突 当我今天遇到这些问题时,我会采取跟踪和错误的方法来使事情正常工作。我需要更多的

  • 当我试图在Spring4.x上进行测试时,我使用了MockMvc web客户端,但我正在阅读和尝试Spring5.x的新特性。 我认为,WebTestClient和MockMvc是相同或非常相似的。 MockMvc和WebTestClient之间的区别是什么?

  • 有人能给我解释一下map和flatMap之间的区别,以及什么是各自的好用例吗? “结果扁平化”是什么意思?它有什么好处?

  • 给定以下从静态编程语言Koans中提取的代码: 我自己的解决方案使用了。两者都适用于koan场景。 和的文档似乎非常相似。 这两个功能有什么区别?

  • 问题内容: 在此示例中: 无法编译为: 而被编译器接受。 这个答案说明唯一的区别是,与不同,它允许您稍后引用类型,似乎并非如此。 是什么区别,并在这种情况下,为什么不第一编译? 问题答案: 通过使用以下签名定义方法: 并像这样调用它: 在jls§8.1.2中,我们发现(有趣的部分被我加粗了): 通用类声明定义了一组参数化类型(第4.5节), 每种可能通过类型arguments调用类型参数节的类型

  • 本文向大家介绍Windows和Linux之间的根本区别是什么?,包括了Windows和Linux之间的根本区别是什么?的使用技巧和注意事项,需要的朋友参考一下 视窗 窗口操作系统是磁盘操作系统的扩展。 Windows是最流行,最简单的操作系统,任何可以阅读和理解基本英语的人都可以使用Windows,因为它不需要任何特殊培训。 它要求DOS最初运行各种应用程序。因此,应该将DOS安装到内存中,然后才

  • 问题内容: 如果我的问题听起来很重要,我会事先道歉,我在QA和Selenium中非常陌生。 之间的确切区别是什么? 和 我在这里看了一下,但没有弄清楚。 问题答案: visibleOfElmementLocated检查元素是否存在以及是否可见。要检查可见性,请确保元素的高度和宽度大于0。 presentOfElementLocated仅检查dom以查看它是否可以定位元素(无论其可见性如何)。 来源