Hibernate和Spring Data JPA之间的主要区别是什么?什么时候不应该使用Hibernate或Spring Data JPA?另外,Spring JDBC模板何时可以比Hibernate / Spring Data JPA更好地运行?
答案 0 :(得分:207)
Hibernate是一个JPA实现,而Spring Data JPA是一个JPA数据访问抽象。 Spring Data为GenericDao
自定义实现提供了解决方案。它还可以通过方法名称约定代表您生成JPA查询。
使用Spring Data,您可以使用Hibernate,Eclipse Link或任何其他JPA提供程序。一个非常有趣的好处是you can control transaction boundaries declaratively using the @Transactional
annotation。
Spring JDBC更轻量级,并且它用于本机查询,如果您只打算单独使用JDBC,那么最好使用Spring JDBC来处理JDBC详细程度。
因此,Hibernate和Spring Data是互补而非竞争对手。
答案 1 :(得分:102)
我们在这里使用了3种不同的东西:
让我们了解 spring data jpa和spring + hibernate 是如何工作的 -
假设你正在为你的应用程序使用spring + hibernate。现在你需要有dao接口和实现,你将使用hibernate的SessionFactory编写crud操作。假设您正在为Employee类编写dao类,明天在您的应用程序中,您可能需要为任何其他实体编写类似的crud操作。所以我们可以在这里看到很多样板代码。
现在,Spring数据jpa允许我们通过扩展其存储库(crudrepository,jparepository)来定义dao接口,因此它在运行时为您提供了dao实现。你不需要再写dao实现了。看看spring data jpa如何让你的生活变得轻松。
答案 2 :(得分:15)
我不同意SpringJPA使生活变得轻松。是的,它提供了一些类,您可以快速制作一些简单的DAO,但实际上,这就是您所能做的。 如果您要执行除findById()或保存以外的其他操作,则必须经历地狱:
为什么自己的事务管理是不利的?由于Java 1.8允许接口中使用默认方法,因此基于Spring注释的事务无法正常工作。
不幸的是,SpringJPA基于反射,有时您需要将方法名称或实体包指向注释(!)。这就是任何重构都会导致严重崩溃的原因。 可悲的是,@ Transactional仅适用于主要DS :(因此,如果您有多个DataSource,请记住-事务仅适用于主要DS:)
Hibernate和Spring Data JPA之间的主要区别是什么?
Hibernate与JPA兼容,而SpringJPA与Spring兼容。当SpringJPA可以在Spring-SpringBoot中使用时,您的HibernateJPA DAO可以与JavaEE或Hibernate Standalone一起使用
什么时候不应该使用Hibernate或Spring Data JPA?另外,Spring JDBC模板何时能比Hibernate / Spring Data JPA更好?
仅在需要使用大量Join或需要使用具有多个数据源连接的Spring时使用Spring JDBC。通常,避免使用JPA进行加入。
但是,我的一般建议是使用全新的解决方案-Daobab(http://www.daobab.io)。 Daobab是我的Java以及任何JPA引擎集成商,我相信它将对您的工作有很大帮助:)
答案 3 :(得分:1)
Hibernate是“ JPA”的实现,它是数据库中Java对象的规范。
我建议使用w.r.t JPA,因为您可以在不同的ORMS之间切换。
使用JDBC时,您需要使用SQL查询,因此,如果您精通SQL,则可以使用JDBC。
答案 4 :(得分:1)
Spring Data
是JPA
之上的便捷库,它抽象了很多东西,并将Spring魔术(不管喜欢与否)带到了持久性存储访问中。它主要用于处理关系数据库。简而言之,它允许您声明具有findByNameOrderByAge(String name);
之类的方法的接口,这些方法将在运行时进行解析并转换为适当的JPA
查询。
将其放置在JPA
顶部使它具有以下用途:
不了解SQL
或非常不了解的新手开发人员。这是一个
灾难的秘诀,但如果这个项目微不足道,他们可以避免。
经验丰富的工程师,他们知道自己的工作并想要完成工作 快速。这可能是一种可行的策略(但请进一步阅读)。
根据我对Spring Data
的经验,它的魔力太大(通常适用于Spring
)。我开始在一个项目中大量使用它,并最终遇到了几个无法解决的问题,最终导致丑陋的解决方法。后来我读了其他用户的抱怨,并意识到这些问题是Spring Data
的典型问题。
我最终走低了一层,开始使用JDBI
-一个不错的库,它具有足够的“魔力”可以将您从样板中解救出来。有了它,您就可以完全控制SQL查询,几乎不需要与库打架。
答案 5 :(得分:0)
如果您更喜欢简单性和对SQL查询的更多控制,建议使用Spring Data / Spring JDBC。
它在JPA中有大量的学习曲线,有时很难调试问题。 另一方面,虽然您可以完全控制SQL,但是优化查询和提高性能变得容易得多。您可以轻松地与DBA或对数据库有更好了解的人共享SQL。