【问题标题】:Spring boot JPA without Spring data没有 Spring 数据的 Spring Boot JPA
【发布时间】:2016-08-08 23:18:09
【问题描述】:

我正在逐步将 Spring Boot 引入 Spring JPA 项目。我的意图是首先引入 Spring Boot,而不是在稍后的某个阶段引入 Spring Data,但我找不到任何使用 Spring Boot + JPA 没有 Spring Data 的示例(也没有合适的入门者)。

怎么会?在没有 Spring Data 的情况下将 Spring Boot 引入 Spring JPA 项目是否有任何好处,或者只有使用 Spring Data 才有意义。

任何文章链接或示例代码都会有所帮助和赞赏,谢谢

更多上下文

我正在处理一个实时项目,因此每次更改都会带来风险。我们正在讨论从 XML 迁移到基于 JAVA 的配置,我同时主张采用 Spring Boot,但我缺乏有说服力的卖点。

就个人而言,我希望在所有层都包含 Spring Boot 以提高未来的生产力,但我需要更好地论证在我们的 Service/DAO 模块中使用它的直接直接好处,该模块目前基于 Spring/JPA/Hibernate使用良好的旧手动 CRUD 实现。

所以我需要在持久层上使用 Spring Boot 的卖点,但那些超越 Spring Data 的卖点(例如配置增益、维护、测试......任何东西)

【问题讨论】:

  • 据我所知,没有Spring JPA。但是,Spring Data JPA 是带有 JPA 后端的 Spring Data。这能回答你的问题吗?
  • 没有spring boot spring jpa starter,这很清楚。但是我有一个使用 JPA/Hibernate 的 Spring 项目,我想更倾向于 Spring Boot,因为那里发生的所有好东西。我当时想做一步,所以没有引入Spring Data。但是想知道这是否有意义,如何立即向我的项目经理证明它是正确的(代码、配置等)。
  • 没有 Spring Data 就没有 Spring JPA 支持。 Spring JPA 依赖于 Spring Data。

标签: spring spring-boot spring-data spring-data-jpa


【解决方案1】:

据我所知,spring-boot 意味着更方便,而不是任何独立的业务功能。

换句话说,spring-boot 可以帮助您以某种自动方式启动和配置您的应用程序。但是您可以在没有spring-boot 的情况下使用您自己的特定配置来做到这一点。

因此,您将在您的应用程序中使用spring-boot 意味着您将在您的原始应用程序中使用spring-boot 的自动配置功能。

实际上,在spring-data-jpa 中实现的Spring JPA 是您要寻找的,而不是spring-boot。当然,spring-boot 可以大大简化您的工作。

【讨论】:

    【解决方案2】:

    正如人们上面所说,没有 Spring Boot JPA。它可以是 Spring Boot Data JPA,也可以是 JPA 本身。

    我能想到的直接好处:

    • 使用 Spring Data JPA,您无需编写 Dao 层。对于所有 CRUD 操作,CrudRepository 接口为您提供所需的一切。如果这还不够,您只需要使用 @Query 注释来微调您的 SQL

    • 按惯例配置。例如,使用 Spring Boot,仅在类路径中具有 H2 依赖项即可让 Spring 使用 H2 内存数据库,默认情况下为您提供数据源配置和事务管理(仅在 JPA 存储库级别)

    • 能够创建微服务。使用 Spring Boot,您可以使用 java -jar 创建可以在多个盒子上部署和运行的微服务 ...

    • 您可以使用一个简单的注解启用基于注解的事务:@EnableTransactionManagement

    • 基于 XML 的 Java 配置。这个优势不可小觑

    • 更少的代码(DAO 层)也意味着更少的维护

    • 围绕数据提供 RESTful API 的原生能力:https://spring.io/guides/gs/accessing-data-rest/

    这完全取决于贵公司的发展方向。如果他们想更快地交付业务价值并转向更多的 DevOps 运营模式,那么上述优势应该足以成为任何组织的卖点

    【讨论】:

      【解决方案3】:

      带有 JPA(例如 Hibernate)但没有 Spring-Data-Jpa 的 Spring 意味着您直接与 JPA 实体管理器进行交互。通常你使用它来实现你自己的 DAO 并使用 @Respository 注释。

      @Respository
      public class UserDao {
          @PersistenceContext EntityManager em;
      
          public User findUserByLogin(Sting login) {
              ....
          }
      }
      

      即使没有启动项目,您也可以使用 Spring-Data-JPA 项目,并以这种老式风格实现存储库。 (然后你可以展示当你编写 Spring-Data-JPA 接口时它变得多么简单)

      【讨论】:

      • 感谢拉尔夫的回答。我为这个问题添加了更多背景信息。我需要更多使用 Spring Boot 来支持 JPA 的好处。使用 spring 数据并不是一个优势,因为我们有手动的通用实现,我们已经使用了很可能与 spring 数据底层相同的模式。因此,搜索、分页、通用投影等我们已经有了可靠的覆盖范围。除了使用 Spring Data 之外,您还记得其他什么可以作为引入 Spring Boot 及其 JPA 支持的好卖点吗?
      • @learnAndImprove:我(个人意见)不喜欢 Spring Boot,因为它需要学习一种新的配置风格,如果你学会了,你会发现这还不够强大,所以你需要也学习普通的弹簧配置。 -- 所以不,我没有 Boot 的卖点。
      猜你喜欢
      • 2014-07-21
      • 1970-01-01
      • 2017-11-06
      • 2019-10-03
      • 2014-12-06
      • 2017-02-16
      • 2022-06-13
      • 2017-02-20
      相关资源
      最近更新 更多