一、入门案例(四种方式创建Boot工程)
- IDEA 版本:直接选中创建即可,默认会连接到 spring.io 上去创建
- Group、Artifact、Version :Maven 工程的GAV 坐标
- Name、Description:项目名称和描述,会出现在pom文件中
- Package:默认创建的包
- 使用Spring官网生成并导入 https://start.spring.io
- 使用阿里云提供的服务器 http://start.aliyun.com (同样使用IDEA 来创建但是将server Url 改为阿里云即可)
- 手工创建(已经使用过SpringBoot的情况下):
- pom文件:添加 parent 继承Spring-boot-starter-parent 、导入spring-boot-starter-web 依赖
- application:@SpringBootApplication 、 定义main 方法 执行 SpringApplication.run(类名.class , args)
忽略SpringBoot 项目默认创建的文件:
Settings -> Editor -> File Types - > Ignored Files and Foldrs
二、解析
简介
SringBoot 就是 Pivotal 团队设计出来用于简化Spring 应用的初始搭建和开发过程
- 简化依赖配置
- 常用工程自动配置
- 辅助功能
parent
SpringBoot 程序需要继承 spring-boot-starter-parent 才能够运行
- parent 中又继承了一个 spring-boot-dependencies
- 这个pom将很多依赖都配置到了一个 dependencyManagement 中
- 为我们做好了依赖管理,避免了依赖版本冲突
- 还可以直接导入spring-boot-dependencies 这个依赖来实现
dependencyManagement:用来做依赖管理的 这里配置的依赖不会直接被导入,而是记录好每一个依赖,用于版本管理,当一个项目中导入依赖但是没有指定Version的时候如果 dependencyManagement里面记录了这个依赖,就会使用dependencyManagement中定义的版本,否则报错。
选中多个文件 -》 右键 compare files 可以对比两个文件的不同
开发模式:
- 定义一系列常用的坐标版本
- 定义常用坐标组合
- 使用组合
starter
一个starter 中定义了若干个用于实现该功能的依赖引入了一个starter就引入了这些依赖
引导类
-
引导类是Boot工程的执行入口,运行main方法就可以启动项目。
-
Boot 工程运行后初始化Spring容器,
-
@SpringBootApplication 中被没有指定包的 @ComponentScan 标记
@ComponentScan 如果没有指定包,默认就是当前类所在包及其子包
辅助功能(内嵌Tomcat)
- 内嵌Tomcat 的原理就是将Tomcat服务器作为对象运行,并将该对象交给Spring容器管理
- 变更内嵌服务器:排除默认的tomcat GA,导入新的服务器GA即可
SpringBoot默认支持三款服务器:tomcat、jetty、undertow
<--! 排除依赖 -->
<exclusions>
<exclusion>
<group></group>
<aritfactId></aritfactId>
</exclusion>
</exclusions>
三、配置
- 配置文件类型和优先级
- properties、yml、yaml
- 属性提示消失问题解决
- Project Structure -》 Facets -》 找到右边的图标进行添加
- yaml文件
- 语法规则 (大小写敏感)
- [ {…} , {…} ]
- 数据的读取 ( ${一级属性 . 二级属性} … 数组使用 [ ] 即可 ) @Value 来注入 SpEl
-
- 读取所有的属性信息 ( 使用 Environment 对象 标注 @Automated 来获取所有配置 ,env.getProperty( " 属性名 ") 获取单个 )
- 引用类型数据封装(通常用作配置文件):
- yaml中定义好这段配置
- 定义好用于封装获取配置信息的实体类(属性名要和yaml中的配置key 对应)
- 使用注解 @ConfigurationProperties( prefix=” xxx “ ) 来关联到yaml中的一个对象
- 将该实体类 @Component() 注入到Spring 容器中才能正确的被属性注入
-
- yaml 文件内部变量引用(同样使用SpEL、使用 ” “ 包裹起来的字符中的转义字符可以生效 )
- SpringBoot 中yaml 配置文件其实就是将 所有的配置都写成不同的对象,使用的时候直接将他分发到不同的配置类中
- 语法规则 (大小写敏感)
四、整合第三方技术
Junit
-
导入对应的starter
-
测试类使用 @SpringBootTest 修饰被测试的类
-
使用自动装配的形式添加要测试的对象
-
测试类如果存在于引导类所在包或子包中,则无需指定引导类,否则通过classes属性指定
@SpringBootTest(classes=Application.class)
Mybatis
- 导入对应坐标(mybatis、mysqlDriver)
- 数据源参数设置
- 使用注解配置mybatis中的mapper,添加@Mapper被容器识别到
时区问题:serverTimezone=UTC
驱动过时问题:com.mysql.cj.jdbc.Driver
Mybatis-Plus
- 导入对应坐标(mybatis-plus(手动添加)、mysqlDriver)
- 数据源参数设置
- 使用注解配置mybatis中的mapper,添加@Mapper被容器识别到
Druid
-
导入对应坐标(mybatis-plus(手动添加)、mysqlDriver)
-
数据源参数设置
-
导入坐标就可以使用的通用数据源配置方法
spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/mybatis_test username: root password: 2580 type: org.springframework.jdbc.datasource.DriverManagerDataSource
-
导入 druid-spring-boot-starter才可以使用的专用方法
spring: datasource: druid: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/mybatis_test username: root password: 2580
-
SSMP
增删改查
分页:
-
IPage 核心功能对象,封装了分页操作所有的数据
IPage iPage = new Page(1,3); bookDao.selectPage(iPage, null); System.out.println(iPage.getRecords()); System.out.println(iPage.getCurrent()); System.out.println(iPage.getPages()); System.out.println(iPage.getSize()); System.out.println(iPage.getTotal());
-
Mybatis拦截器(MybatisPlusInterceptor) 分页操作是在常规操作的基础上增强的,内部动态的拼接sql,所以就需要使用一个拦截器实现
@Configuration public class MPConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor(){ MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor(); mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor()); return mybatisPlusInterceptor; } }
Service 快速开发(MP)
-
dao层继承 BaseMapper< pojo>
@Mapper public interface BookDao extends BaseMapper<Book> { }
-
service 继承 IServiceM< pojo>
public interface IBookService extends IService<Book> { }
-
serviceImpl 继承 ServiceImpl<dao, pojo> 实现 service
@Service public class IBookServiceImpl extends ServiceImpl<BookDao, Book> implements IBookService { }
如果需要自定义业务,按照传统开发即可