Spring数据JDBC/Spring数据JPA vs Hibernate
选择SpringDataJDBC/SpringDataJPA与Hibernate的典型现实场景是什么?我想了解这两种实现最适合的场景。您的问题的一个问题是您似乎暗示Spring Data JPA类似于Hibernate,但事实并非如此。SpringDataJPA只是一个以Spring为中心的包装器,它提供了灵活的语义和特性,包装了JPA提供者,Hibernate就是其中的一个实现 因此,如果不包括一些JPA实现(如Hibernate),就不能使用Spring数据JPA 那么您要问的基本问题是为什么要使用JDBC而不是ORM。为了理解这一点,您应该花时间了解ORM的好处。互联网上有很多文章可以给你提供这些信息 但是,即使在ORM驱动的应用程序中,有时也会出现需要绕过ORM框架并像在JDBC中一样使用本机SQL的情况。这些情况通常很少见,但当您希望利用某些不受支持的数据库功能或希望最终控制操作结果等时,这些情况是必要的Spring数据JDBC/Spring数据JPA vs Hibernate,hibernate,spring-data,spring-data-jpa,spring-data-jdbc,Hibernate,Spring Data,Spring Data Jpa,Spring Data Jdbc,选择SpringDataJDBC/SpringDataJPA与Hibernate的典型现实场景是什么?我想了解这两种实现最适合的场景。您的问题的一个问题是您似乎暗示Spring Data JPA类似于Hibernate,但事实并非如此。SpringDataJPA只是一个以Spring为中心的包装器,它提供了灵活的语义和特性,包装了JPA提供者,Hibernate就是其中的一个实现 因此,如果不包括一些JPA实现(如Hibernate),就不能使用Spring数据JPA 那么您要问的基本问题是为什
使用哪一个的决定因素最终取决于应用程序的需求。但是,仅仅因为您选择使用ORM框架,就不会像在JDBC中一样,相互排斥执行本机查询和SQL语句的能力。这些功能仍然可用,您通常只在极少数情况下使用这些功能。正如@Naros所说,当前标题中的问题实际上不起作用。似乎我们真的应该看看4个选项,主要列出每种方法的优点,缺点是缺少其他方法的优点: 没有Spring数据的JDBC 您可以100%细粒度地控制正在发生的事情。框架不会生成或注入任何内容。这听起来可能是个骗局,但如果您试图调整映射和配置,让一些JPA实现完成您可以在java和SQL中轻松编写的工作,您就会明白这是一个巨大的优势 您不必学习JPA,也不必学习Spring数据。我个人认为Spring数据很简单,但我有偏见(见我的个人资料)。但是,一旦你离开了琐碎的实体和设置领域,JPA无疑是最具挑战性的
- 不要求如何对域模型建模(例如,JPA需要默认构造函数)
- 约克
- MyBatis
- Spring JdbcTemplate(无需Spring的其余部分即可使用)
- QueryDsl
- 具有现成CRUD方法的存储库
- 对集合的支持。看
- 在Spring基础设施中的良好集成,用于事务处理、依赖项注入、错误转换、分页
- 它仍然是一个非常简单的编程模型。SQL语句恰好在人们预期的时间发生,如果您愿意,您可以回到简单的JDBC,不管是否支持其他框架,而不破坏任何抽象
- 使用查询方法(您只需定义接口,使其具有
方法,Spring会动态为您生成该方法)或findByLastName
注释或自定义方法,就可以轻松地扩展存储库@query
- 支持分页
- 缓存(第一级、第二级和查询缓存)
- 根据查询自动创建实例
- 实体之间的导航
- 延迟加载
- 对实体更改的脏检查/跟踪
- 如果您想要/需要细粒度控制,请使用JDBC
- 如果您打算使用JPA,请确保尽早理解它
- 如果您选择的持久化技术Spring Data提供了一个模块,我会使用它。这将使生活更轻松。但我还是有偏见
- 问题是,jpa的Spring数据是对jpa的抽象,是对JDBC的抽象。If提供了很好的特性,即使jpa没有它也可以使用。通过SpringDataREST,它变得非常强大
但是一个框架为您做的越多,您就越需要了解底层技术。如果使用spring数据rest,则更为正确。最好是从理解sql(设计和查询)开始,然后是jpa(延迟加载、实例状态、实体、可嵌入、缓存、查询、事务同步)
然后您尝试SpringDataJPA,并决定它是否为您的项目带来价值。