Spring Data JPA(一) 基础入门

来源:这里教程网 时间:2026-03-03 20:57:34 作者:

说起 Spring,先看它的发展历史,对整个生态有了基础认知,再看下 Spring 依赖的基础机制(IoC 和 AOP),就达到入门须知的目的了。毕竟 Spring 太大了,如果把话题扯得太宽泛太细节,很可能会迷失在 Spring 生态森林里,也算是在这里列一份 Spring 大纲地图,之后可以依照大纲分模块去逐个突破。 Spring 前世今生 这不是 Java 的黑历史,而是 Java 的来时路。 J2ME(微型版)、J2SE(标准版)、J2EE(企业版)是 Java 不同版本,随着需求的增长,J2EE 不断变得复杂,其中一项重要工作就是编写 EJB(Enterprise Java Beans),如果没有 JBuilder1 等 IDE 工具的支持,EJB 2.x 的开发经历可以说是让人抓狂,虽然后续的 EJB 3.x 也走的轻量化路线。 2002 年,Rod Johnson2 出版了的 Expert One-on-One J2EE Design and Development,又在 2004 年出版了 Expert One-on-One J2EE Development without EJB3。这两本书对 J2EE 当时存在的各种问题进行了深入剖析,还提出了一套解决方案,就是 Spring Framework(对 Rod Johnson 一系列思想的实践),现在说到 Spring,狭义上指的是 Spring Framework(J2EE行业标准),广义上现在已经成为了一个庞大的家族生态。 2003 年,Spring Framework 初具框架模型,2004 年 3 月发布 1.0 正式版。Spring Framework 不是站在 J2EE 对立面,而是对它的补充。Spring Framework 的模块化是很好的设计,它的大量模块改变了 Java EE 项目的开发方式,开发时根据场景引入需要的模块。早期版本会提供一个包含所有内容的 jar 包,但后来取消了这个方式(因为开发决定依赖什么模块时,只能自行判断该模块依赖哪些下游,但又不确定不同依赖、不同版本依赖是否兼容)。 Spring Boot 解决了这个问题,提供了起步依赖、自动配置,以及各种面向生产的能力,让应用开发更加高效。在云计算微服务时代诞生了 Spring Cloud,衍生出了庞大的 Spring 家族。 Spring 家族生态 Spring Framework Spring Framework 是 Spring 家族成员的基础,家族早期只有少数几个围绕 Spring Framework 的项目。有项目一开始就是在 Spring Framework 上单独开发的,也有很多模块后来从 Spring Framework 脱离出来独立发展。 Spring Framework 为 J2EE 应用提供了一整套开发配置模型,除了依赖注入、AOP、资源管理等核心特性,还有事务管理、ORM 框架等组成的数据访问能力,框架还为多种类似功能的第三方组件提供了一致的抽象,比如Hibernate 或者 MyBatis 都可以作为插件适配。Spring MVC Web 框架也取代了早期 SSH 组合中的 Struts,后来 Spring Framework 5 又推出了响应式 Web 框架 Spring WebFlux。Spring Framework 还有很多实用的功能,比如调度任务支持、缓存抽象等。 Spring Framework 支持的 JDK 和组件一直在升级,每 3~4 年会有个重大版本发布。Spring Framework 各版本之间的兼容性还是比较好的,特别是那些核心功能,在升级时能无缝平移。但升级也不是没有代价,抛开依赖的各种库的版本变化,框架自己的一些配置默认值有可能变化,有些功能可能会被淘汰。如果进行了版本升级,尤其是大版本升级,最好对系统做一轮完整的回归测试。Spring Framework 主要版本升级列表如下, 版本 支持的 JDK 版本 时间 6.0.x JDK 17~21 5.3.x JDK 8~19 2024.12 5.2.x JDK 8~15 2021.12 5.1.x JDK 8~15 2020.12 5.0.x JDK 8~10 2020.12 4.3.x JDK 6~8 2020.12 Spring Boot Spring Boot 提供了起步依赖、自动配置,以及各种面向生产的能力,降低了开发生产级 Spring 应用的门槛。起步依赖解决了 Spring 应用依赖管理困境(按功能组织依赖),Spring Boot 的依赖经过了严格的兼容性测试。自动配置减少了 Spring 应用的配置量,甚至能做到零配置。Spring Boot 可以根据多种条件自动判断是否需要做相应配置,开发也可以自行微调。Spring 团队也开发了 Spring Roo 项目,可以直接生成所需的代码和配置。 注:SpringBoot 中的约定大于配置 按照约定编程是一种编程范式,把一些特定类放在特定位置,使用特定注解,SpringBoot 能够自动地进行 Bean 的配置。比如把 Controller 类放在 src/main/java/myapp/controller 路径下,使用 @RestController 或 @Controller 注解,SpringBoot 会自动将这些 Controller 注册为 Spring 应用上下文中的 Beans。对比 SpringMVC,得在 web.xml 里面配置前端控制器,得在核心配置文件(*-servlet.xml)中配置视图解析器,得配置第三方的 Tomcat 服务器。SpringBoot 就不需要配置这些,内嵌了 Tomcat 服务器,只需要在 Maven 配置文件(Pom.xml)里导入 SpringMVC 所需要的依赖就可以了。在传统需要配置的地方,SpringBoot 都进行了约定,开发人员能直接地写业务逻辑代码,更少的关心配置问题。 参考:SpringBoot约定大于配置-CSDN博客 常见的约定如下, 1. 主应用类应该用 @SpringBootApplication 注解(组合注解),包含@SpringBootConfiguration(表示这是一个Spring Boot配置类)、@EnableAutoConfiguration(启用Spring Boot自动配置)以及@ComponentScan(指定Spring扫描的包)。 2. 配置文件 application.properties 或 application.yml 通常放在 src/main/resources 目录下。 3. 静态资源如 HTML、CSS、JavaScript 和图片等应放在 src/main/resources/static 目录。 4. 模板文件如 JSP、Thymeleaf 等放在 src/main/resources/templates 目录。 5. 日志配置文件 application.properties 或 application.yml 中可以设置日志级别。 6. 外部配置可以通过命令行参数 --spring.config.location 或环境变量 SPRING_CONFIG_LOCATION 来指定配置文件的位置。 7. 可以通过设置 spring.profiles 来激活特定的配置文件,例如application-dev.properties 或 application-prod.properties。 Spring Boot 遵循一定的发布周期,6 个月有一个版本发布,中间可能会发布相关补丁版本。大版本通常在 3 年以上,小版本提供至少 12 个月的支持。在 Spring Boot 2.4.0 之前版本带后缀,比如 2.2.7.RELEASE,之后版本直接是类似 2.4.0 这种形式。 版本 支持的 JDK 版本 对应的 Spring Framework 版本 时间 3.0.x JDK 17~21 6.0.x 2.7.x JDK 8~19 5.3.x 2023 年 5 月 2.6.x JDK 8~19 5.3.x 2022 年 11 月 2.5.x JDK 8~19 5.3.x 2022 年 5 月 2.4.x JDK 8~19 5.3.x 2021 年 11 月 Spring Cloud Spring Cloud 让分布式微服务实现变得简单,直接站在巨人的肩膀上编程实现高可靠的分布式系统。Spring Cloud 构建在 Spring Boot 的各种功能之上,用到了起步依赖与自动配置。两者有一些对应关系,为了避免一些兼容性问题,官方给出了版本推荐指南。早期 Spring Cloud 采用伦敦地铁站作为 Release 号,按字母顺序从前往后排列(不便于记忆),后来又用年份加数字的方式。最近的几个 Spring Cloud 版本对应的 Spring Boot 版本如下, Spring Cloud 版本 对应的 Spring Boot 版本 2021.0(别名为 Jubilee) 2.6.x 2020.0(别名为 Ilford) 2.4.x,从 2020.0.3 开始对应 2.5.x Hoxton 2.2.x,从 SR5 开始对应 2.3.x Greenwich 2.1.x Finchley 2.0.x Spring Cloud 是一系列模块的集合,分别实现了服务发现、配置管理、服务路由、服务熔断、链路追踪等功能。早期 Spring Cloud 借鉴引入了 Netflix 的最佳实践,基于 Netflix 开源设施开发了 Spring Cloud Netflix ,随后也出现了 Spring Cloud Zookeeper、Spring Cloud Consul 等基于流行开源设施的模块,在这些设施上提供服务发现、服务配置等功能。Spring Cloud 主要子模块都有自己的独立版本,各模块版本的 EOL 等信息可以在官网各模块的 SUPPORT 板块里查看。下面列举下各个主要子模块, 项目名 功能 Spring Cloud Bus 提供一个基于分布式消息的事件总线,可以方便地在集群中传播状态变更 Spring Cloud Config 提供一个基于 Git 仓库的集中式配置中心 Spring Cloud Consul 基于 Hashicorp Consul 实现服务发现与服务配置能力 Spring Cloud Data Flow 提供了一套完整的云原生服务编排功能,包含简单易用的 DSL、拖曳式的 GUI 和 REST-API,支持海量数据的批处理和流式处理 Spring Cloud Gateway 提供基于 Project Reactor 的智能服务路由的能力 Spring Cloud Netflix 整合大量 Netflix 的开源设施,比如 Eureka、Hystrix、Zuul 等 Spring Cloud OpenFeign 基于 OpenFeign,通过声明式 REST 客户端来访问分布式系统中的服务 Spring Cloud Sleuth 提供分布式服务请求链路分析的能力 Spring Cloud Stream 提供轻量级的事件驱动能力,通过声明式的方式来使用 Apache Kafka 或者 RabbitMQ 收发消息 Spring Cloud Zookeeper 基于 Apache Zookeeper 实现服务发现与服务配置能力 Spring Data Spring Framework 为传统关系型数据库操作提供了统一抽象,不管事务或是 ORM 都有了很好的封装。为了避免框架臃肿,把对它们的支持都放入 Spring Data 单独模块里开发支持。Spring Data 也包含了很多子模块,包括 JDBC 增强功能、JPA 支持、不同类型的 NoSQL 支持以及对 REST 资源的支持。虽然底层数据库种类挺多,但 Spring Data 在此之上提供了诸如仓库(Repository)和模板(Template)统一抽象,像 RDBMS、Redis、MongoDB 等数据库操作都有类似的编程模型。下面列举些主要的 Spring Data 子模块,有些是 Spring 官方提供的,有些是由社区维护的, 项目名 功能 Spring Data Commons 提供每个 Spring Data 模块都需要依赖的核心概念 Spring Data Couchbase 提供 Couchbase 相关的支持(Couchbase 是一款文档型 NoSQL 数据库) Spring Data Elasticsearch 提供 Elasticsearch 相关的支持(Elasticsearch 是一款分布式的全文搜索引擎) Spring Data JDBC 为 JDBC 提供仓库支持 Spring Data JPA 为 JPA 提供仓库支持,底层使用 Hibernate 作为 JPA 实现 Spring Data LDAP 为 LDAP(Lightweight Directory Access Protocol,轻量级目录访问协议)提供仓库支持(LDAP 是一种开放的工业标准) Spring Data MongoDB 提供 MongoDB 相关的支持(MongoDB 是一款文档型 NoSQL 数据库) Spring Data Neo4j 提供 Neo4j 相关的支持(Neo4j 是一款图数据库) Spring Data Redis 提供 Redis 相关的支持(Redis 是一款键值型 NoSQL 数据库) Spring Data REST 将 Spring Data 仓库发布为超媒体驱动的 REST 资源 Spring IoC容器 Spring AOP Have Fun ————————————————                             版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。                          原文链接:https://blog.csdn.net/sinat_34715587/article/details/144226245

相关推荐