Hibernate和Spring Data JPA之间的主要区别是什么?
什么时候不应该使用Hibernate或Spring Data JPA?
另外,Spring JDBC模板什么时候比Hibernate和Spring Data JPA表现更好?
Hibernate和Spring Data JPA之间的主要区别是什么?
什么时候不应该使用Hibernate或Spring Data JPA?
另外,Spring JDBC模板什么时候比Hibernate和Spring Data JPA表现更好?
当前回答
Hibernate是“JPA”的实现,JPA是数据库中Java对象的规范。
我建议使用w.r.t JPA,因为您可以在不同的ORMS之间切换。
当你使用JDBC时,你需要使用SQL查询,所以如果你精通SQL,那么就去使用JDBC。
其他回答
Hibernate是一个JPA实现,而Spring Data JPA是一个JPA数据访问抽象。没有JPA提供者,Spring Data JPA就无法工作。
Spring Data为DDD Repository模式或遗留的GenericDao自定义实现提供了解决方案。它还可以通过方法名称约定为您生成JPA查询。
对于Spring Data,您可以使用Hibernate、EclipseLink或任何其他JPA提供者。使用Spring或Java EE的一个非常有趣的好处是,您可以使用@Transactional注释以声明方式控制事务边界。
Spring JDBC要轻量级得多,它是为本地查询而设计的,如果您只想单独使用JDBC,那么最好使用Spring JDBC来处理JDBC的冗长性。
因此,Hibernate和Spring Data是互补的,而不是竞争对手。
这里我们使用了3种不同的东西:
JPA: Java持久化api,提供了从Java对象持久化、读取、管理数据到数据库关系的规范。 Hibernate:有各种实现jpa的提供者。冬眠就是其中之一。所以我们还有其他的提供者。但是如果使用jpa和spring,它允许您在将来切换到不同的提供商。 Spring Data JPA:这是JPA之上的另一层,Spring提供了它使您的工作更容易。
因此,让我们了解spring data jpa和spring + hibernate是如何工作的
Spring Data JPA:
假设您的应用程序使用spring + hibernate。现在你需要有一个dao接口和实现,你将使用hibernate的SessionFactory编写crud操作。假设您正在为Employee类编写dao类,明天在您的应用程序中,您可能需要为任何其他实体编写类似的crud操作。这里有很多样板代码。
现在Spring data jpa允许我们通过扩展它的存储库(crudrepository, jparepository)来定义dao接口,因此它在运行时为您提供dao实现。您不再需要编写dao实现。这就是spring data jpa使您的生活变得简单的原因。
Hibernate是“JPA”的实现,JPA是数据库中Java对象的规范。
我建议使用w.r.t JPA,因为您可以在不同的ORMS之间切换。
当你使用JDBC时,你需要使用SQL查询,所以如果你精通SQL,那么就去使用JDBC。
如果你更喜欢SQL查询的简单性和更多的控制,那么我建议使用Spring Data/ Spring JDBC。
在JPA中有大量的学习曲线,有时很难调试问题。 另一方面,当您完全控制SQL时,优化查询和提高性能变得更加容易。您可以轻松地与DBA或对数据库有更好理解的人分享您的SQL。
我不同意SpringJPA使生活变得简单。是的,它提供了一些类,您可以快速地创建一些简单的DAO,但实际上,这是您所能做的全部。 如果你想做一些比findById()或save更多的事情,你必须经历地狱:
在org.springframework.data.repository类中没有EntityManager访问权限(这是基本的JPA类!) 自己的事务管理(不允许休眠事务) 多个数据源配置的巨大问题 没有数据源池(HikariCP必须作为第三方库使用)
为什么自己的事务管理是一个缺点?由于Java 1.8允许默认方法进入接口,基于Spring注释的事务,简单的方法不起作用。
不幸的是,SpringJPA是基于反射的,有时您需要将方法名或实体包指向注释(!)。这就是为什么任何重构都会导致大崩溃。 遗憾的是,@Transactional只适用于主DS:(所以,如果你有多个数据源,请记住- transactions只适用于主DS:)
Hibernate和Spring Data JPA之间的主要区别是什么?
Hibernate是JPA兼容的,SpringJPA是Spring兼容的。当SpringJPA可以在Spring - SpringBoot中使用时,您的HibernateJPA DAO可以与JavaEE或Hibernate独立使用
什么时候不应该使用Hibernate或Spring Data JPA?此外,什么时候Spring JDBC模板比Hibernate / Spring Data JPA执行得更好?
只有当您需要使用很多join或者需要使用具有多个数据源连接的Spring时才使用Spring JDBC。一般来说,避免使用JPA进行join。
但我的一般建议是,使用新鲜的解决方案——daobab (http://www.daobab.io)。 Daobab是我的Java和任何JPA引擎集成器,我相信它将在您的任务中有很大帮助:)