【目录】
1.从 Spring 到 Spring Boot
2.Spring Boot 核心原理*
3.Spring Boot Starter 详解*
4.JDBC 与数据库连接池*
5.ORM-Hibernate/MyBatis*
6.Spring 集成 ORM/JPA*
7.Spring Boot 集成 ORM/JPA
8.第 10 课总结回顾与作业实践
一 Spring -> SpringBoot
核心:约定大于配置
SpringBoot简化Spring的方式:
- Spring 本身技术的成熟与完善,各方面第三方组件的成熟集成
- Spring 团队在去 web 容器化等方面的努力
- 基于 MAVEN 与 POM 的 Java 生态体系,整合 POM 模板成为可能
- 避免大量 maven 导入和各种版本冲突
现阶段发展方向: Spring - SpringBoot - SpringCloud(云原生)
SpringBoot提供的能力:
- 创建独立运行的 Spring 应用
- 直接嵌入 Tomcat 或 Jetty,Undertow,无需部署 WAR 包
- 提供限定性的 starter 依赖简化配置(就是脚手架)
- 在必要时自动化配置 Spring 和其他三方依赖库
- 提供生产 production-ready 特性,例如指标度量,健康检查,外部配置等
- 完全零代码生产和不需要 XML 配置
二 SpringBoot 核心原理
两大核心原理
- 自动化配置:简化配置核心
++ 基于 Configuration,EnableXX,Condition - spring-boot-starter:脚手架核心
++ 整合各种第三方类库,协同工具
通过application.yaml —> Configuration配置 —> Bean:Starter组件
约定大于配置优势
一、Maven 的目录结构:默认有 resources 文件夹存放配置文件。默认打包方式为 jar
二、默认的配置文件:application.properties 或 application.yml 文件
三、默认通过 spring.profiles.active 属性来决定运行环境时的配置文件
四、EnableAutoConfiguration 默认对于依赖的 starter 进行自动装载
五、spring-boot-start-web 中默认包含 spring-mvc 相关依赖以及内置的 web容器,使得构建一个 web 应用更加简单
自动配置原理
@SpringBootApplication 注解功能
SpringBoot 应用标注在某个类上说明这个类是 SpringBoot 的主配置类,SpringBoot 就会运行这个类的 main 方法来启动 SpringBoot 项目:
- @SpringBootConfiguration
- @EnableAutoConfiguration
- @AutoConfigurationPackage
- @Import({AutoConfigurationImportSelector.class})
加载所有 META-INF/spring.factories 中存在的配置类(类似 SpringMVC 中加载所有 converter)
条件化配置
@ConditionalOnBean
@ConditionalOnClass
@ConditionalOnMissingBean
@ConditionalOnProperty
@ConditionalOnResource
@ConditionalOnSingleCandidate
@ConditionalOnWebApplication
三 SpringBoot Starter 原理
1、spring.provides
2、spring.factories
3、additional–metadata
4、自定义 Configuration 类
以实际项目为例(待补充)
四 JDBC 与数据库连接池
连接池分类:Druid,C3P0,DBCP,Hikari
数据库连接池采用的是代理模式
五 ORM 框架(对象关系映射)
Hibernate 和 Mybatis(略)
六 Spring 集成 ORM
JPA 的全称是 Java Persistence API,即 Java 持久化 API,是一套基于 ORM 的规范,内部是由一系列的接口和抽象类构成。
JPA 通过 JDK 5.0 注解描述对象-关系表映射关系,并将运行期的实体对象持久化到数据库中。
核心 EntityManager
Spring 事务管理
JDBC 层,数据库访问层,怎么操作事务?编程式事务管理
Spring 怎么做到无侵入实现事务?声明式事务管理:事务管理器 + AOP
Spring 声明式事务配置参考
事务的传播性:
@Transactional(propagation=Propagation.REQUIRED)
事务的隔离级别:
@Transactional(isolation = Isolation.READ_UNCOMMITTED)
读取未提交数据(会出现脏读, 不可重复读) 基本不使用
只读:
@Transactional(readOnly=true)
该属性用于设置当前事务是否为只读事务,设置为 true 表示只读,false 则表示可读写,默认值为 false。
事务的超时性:
@Transactional(timeout=30)
回滚:
指定单一异常类:@Transactional(rollbackFor=RuntimeException.class)
指定多个异常类:@Transactional(rollbackFor={RuntimeException.class, Exception.class})
七 SpringBoot 集成 ORM
demo示例(略)