SpringBoot对Spring的改善和优化,它基于约定优于配置的思想,提供了大量的默认配置和实现
使用SpringBoot之后,程序员只需按照它规定的方式去进行程序代码的开发即可,而无需再去编写一堆复杂的配置
SpringBoot的主要功能如下:
- 起步依赖:SpringBoot以功能化的方式将需要的依赖进行组装,并且允许程序员以start的方式进行引入
- 默认配置:SpringBoot实现了大量依赖框架的默认配置项,程序员无须再进行自己配置
- 内置Tomcat:SpringBoot内置了一个tomcat,使用它开发的程序无需再进行tomcat部署,可直接运行
总之:SpringBoot最主要作用就是帮我们快速的构建庞大的spring项目,并且尽可能的减少配置,让程序员去关注业务而非配置。
入门案例
需求:搭建一个SpingBoot项目,实现访问浏览器地址
localhost:8080/index, 返回hello, springboot!这句话
代码开发
创建工程,导入依赖
注意: springboot工程要求必须去继承一个springboot提供的父工程,然后根据业务需要引入指定的starter

<!--父工程-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.3</version>
</parent>
<dependencies>
<!--web依赖启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
创建Controller

创建启动类

启动项目

测试

案例解析
* 做完了入门案例,我们应该会有下面这样几个疑问:
1. 我们的工程在引入`spring-boot-starter-web`依赖的时候,为什么没有指定版本
2. `spring-boot-starter-web`是个啥,为什么引入了它之后,就不需要再引入我们原来做spring开发的那一堆包了
3. 我们的程序没有部署到tomcat,为什么就可以被访问
4. 为什么我们访问程序的时候要用8080端口,谁定义的
版本锁定
我们的项目继承了
spring-boot-starter-parent父工程,它内部已经锁定了一些常见依赖的版本号,故而在我们自己开发的工程中无需再指定依赖的版本。

起步依赖
SpringBoot根据场景将各种依赖组装成了一个个的集合(starter),我们根据功能引入指定的starter即可。

内置tomcat
SpringBoot在中引入一个内置的tomcat,故而我们无需再将程序部署到位置的tomcat中即可运行。

默认配置
SpringBoot的约定大于配置,即SpringBoot的大量配置都有默认值,如果我们不去写配置就使用默认的。
**比如说:**tomcat默认端口 8080等等

配置文件
自定义配置
SpringBoot是基于约定的,很多配置都有默认值,但也允许自定义配置,具体做法是在resources下创建文件:
application.yaml 或者 application.yml 或者 application.properties注意:目前版本中, SpringBoot启动时会依次加载:yaml、yml、properties文件,优先级依次升高

YAML介绍
YAML(YAML Ain’t Markup Language),一种数据序列化格式
语法
# 大小写敏感
# 使用缩进表示层级关系
# 缩进的空格数目不重要,但是相同层级的元素必须左侧对齐
# 参数值和冒号之间必须有空格
# # 表示注释,从这个字符一直到行尾,都会被解析器忽略
server:
port: 8082
servlet:
context-path: /itheima
数据格式
# 对象:键值对的集合
user:
username: '张三'
password: '123'
addressList: # 数组:一组按次序排列的值
- '北京'
- '上海'
- '广州'
读取配置
* 方式1: @Value (了解)
此注解是Spring框架提供的,用来读取配置文件中的属性值并逐个注入到Bean对象的对应属性中
* 方式2: @ConfigurationProperties(掌握)
此注解是SpringBoot框架提供的,用来快速将配置文件中的属性值批量注入到某个Bean对象的多个对应属性中
注意:不要使用 user.name 这个键被操作系统占用了
@Value

@ConfigurationProperties
① 创建一个配置类读取配置信息

添加下面依赖可以解决图中的红色提示
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
② 在使用的地方直接注入配置类

多环境配置
在实际开发中,项目的开发环境、测试环境中配置可能不一致,因此SpringBoot支持多环境配置
开发环境 dev - 本机电脑,localhost:8080 , localhost:3306
测试环境 test- 测试服务器,192.168.110.128:8081 , 192.168.110.129:3306
生产环境 prod - 生产服务器, 10.123.12.110:8082
多环境 对应 多配置文件
dev - application-dev.yml localhost:8080 , localhost:3306
test - application-test.yml 192.168.110.128:8081 , 192.168.110.129:3306
prod - application-prod.yml 10.123.12.110:8082
在Springboot启动的时候,指定当前的环境

将项目打成jar包
<!--在pom.xml的project节点中添加下面配置,然后执行maven clean package-->
<build>
<finalName>springboot</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
命令格式传递参数
java –jar springboot.jar --spring.profiles.active=test # 指定使用test环境
java –jar springboot.jar --spring.profiles.active=test --server.port=9090 # 指定使用test环境,端口号为9090
常用功能
日志输出
Spring支持多种日志级别,通过配置文件,可以输出指定级别的日志
# 包名: 日志级别(常用的级别有4个: debug info warn error)
logging:
level:
org.springframework: info
com.itheima: info
① 打印日志的时候,设置级别
在输出日志的时候就需要设置好当前日志内容级别

② 控制显示日志的级别
# 设置 输出 # debug debug info warn error # info info warn error # warn warn error # error error

③ 访问测试

单元测试
① 引入依赖
在pom.xml加入单元测试的starter
<!--引入junit依赖启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
② 编写测试类
注意测试类的位置: 必须在启动类所在包之下

静态资源
现在项目是一个普通java工程,没有webapp,那么静态资源应该放哪里呢?
SpringBoot默认的静态资源是在
classpath:/static/目录

综合案例
整合Mybatis
数据准备
使用下面的sql创建数据库和表
CREATE DATABASE `springboot`;
USE `springboot`;
-- 创建学生表
DROP TABLE IF EXISTS `tb_student`;
CREATE TABLE `tb_student` (
`id` bigint(20) NOT NULL primary key AUTO_INCREMENT COMMENT '主键ID',
`number` varchar(20) NOT NULL UNIQUE COMMENT '学号',
`user_name` varchar(20) NOT NULL COMMENT '姓名',
`birthday` DATE NOT NULL COMMENT '生日',
`address` varchar(11) DEFAULT NULL COMMENT '地址'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO tb_student VALUES (null,'hm001','张三','1995-05-05','北京市昌平区'), (null,'hm002','李四','1996-06-06','北京市海淀区'),(null,'hm003','王五','1997-07-07','北京市朝阳区'), (null,'hm004','赵六','1998-08-08','北京市丰台区'),(null,'hm005','周七','1999-09-09','北京市顺义区'),(null,'hm006','孙悟空','2000-01-01','花果山水帘洞'),(null,'hm007','猪八戒','2001-02-02','高老庄翠兰家'),(null,'hm008','沙和尚','2002-03-03','流沙河河底'),(null,'hm009','唐玄奘','2003-04-04','东土大唐');
添加依赖
在pom.xml中加入下面依赖
<!--mysql 驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--加入mybatis的启动器,这是mybatis公司提供的-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
创建实体类

代码
package com.itheima.domain;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
private Long id;
private String number;
private String userName;
private Date birthday;
private String address;
}
创建接口

添加接口扫描
在启动类上使用
@MapperScan注解指定mapper接口所在的包

添加配置文件
在配置文件
application.yaml中添加数据源和mybatis的配置

spring:
datasource: # 数据源配置(springboot内置连接池对象HiKariCP)
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql:///springboot
username: root
password: root
mybatis: # mybatis简单配置
configuration:
map-underscore-to-camel-case: true # 开启驼峰式映射
测试

列表查询
添加service层
添加业务层的接口和实现,然后在类中注入mapper对象,并调用其方法

添加controller
添加表示层实现类,然后在类中注入service对象,并调用其方法


统一返回结果
思路
为了前后端更好的交互,我们应当对后端返回的数据格式做一定的约束,使得每次返回的数据格式基本一致

添加结果类
结果类就是我们规定好的一个规范类,以后后端返回的所有内容都要封装到这个类中返回

修改controller
修改查询方法,将查询到的结果列表封装到结果类中再返回

添加前端页面
将资料中提供好的页面复制到项目的静态资源目录下

效果查看
访问首页,观察效果

调整返回时间格式
目前返回的结果中时间格式有问题,需要重新设置下
@JsonFormat(pattern = "yyyy-MM-dd",timezone = "Asia/Shanghai")

新增学生

controller

service

mapper

回显学生
controller

service

mapper

修改学生
controller

service

mapper

删除学生
controller

service

mapper

所有资料都可以私信问我要,有什么问题看到包回的!!!
所有资料都可以私信问我要,有什么问题看到包回的!!!
所有资料都可以私信问我要,有什么问题看到包回的!!!
1390

被折叠的 条评论
为什么被折叠?



