SpringBoot

SpringBoot的主要功能如下:

  • 起步依赖:SpringBoot以功能化的方式将需要的依赖进行组装,并且允许程序员以start的方式进行引入

  • 默认配置:SpringBoot实现了大量依赖框架的默认配置项,程序员无须再进行自己配置

  • 内置Tomcat:SpringBoot内置了一个tomcat,使用它开发的程序无需再进行tomcat部署,可直接运行

一、入门案例

需求:搭建一个SpingBoot项目,实现访问浏览器地址localhost:8080/index, 返回hello, springboot!这句话

1.1 创建工程,导入依赖

注意: springboot工程要求必须去继承一个springboot提供的父工程,然后根据业务需要引入指定的starter

XML 复制代码
<!--父工程-->
<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>

1.2 创建Controller

1.3 创建启动类

1.4 启动项目

1.5 测试

1.6 案例分析

1.6.1 版本锁定

  1. 我们的工程在引入spring-boot-starter-web依赖的时候,为什么没有指定版本?

我们的项目继承了spring-boot-starter-parent父工程,它内部已经锁定了一些常见依赖的版本号,故而在我们自己开发的工程中无需再指定依赖的版本。

1.6.2 起步依赖

2.spring-boot-starter-web是个啥,为什么引入了它之后,就不需要再引入我们原来做spring开发的那一堆包了?

我们的项目继承了spring-boot-starter-parent父工程,它内部已经锁定了一些常见依赖的版本号,故而在我们自己开发的工程中无需再指定依赖的版本。

1.6.3 内置tomcat

3.我们的程序没有部署到tomcat,为什么就可以被访问?

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

1.6.4 默认配置

  1. 为什么我们访问程序的时候要用8080端口,谁定义的?

pringBoot的约定大于配置,即SpringBoot的大量配置都有默认值,如果我们不去写配置就使用默认的。

**比如说:**tomcat默认端口 8080等等

二、配置文件

2.1 自定义配置

SpringBoot是基于约定的,很多配置都有默认值,但也允许自定义配置,具体做法是在resources下创建文件:

复制代码
application.yaml   或者   application.yml  或者  application.properties

注意:目前版本中, SpringBoot启动时会依次加载:yaml、yml、properties文件,优先级依次升高

有多个配置文件时,会选择优先级高的

2.2 YAML介绍

YAML(YAML Ain't Markup Language),一种数据序列化格式

2.2.1 语法

复制代码
# 大小写敏感
# 使用缩进表示层级关系
# 缩进的空格数目不重要,但是相同层级的元素必须左侧对齐 
# 参数值和冒号之间必须有空格
# # 表示注释,从这个字符一直到行尾,都会被解析器忽略
server:
  port: 8082
  servlet:
    context-path: /itheima

2.2.2 数据格式

复制代码
# 对象:键值对的集合
user:
  username: '张三'
  password: '123'
  addressList: # 数组:一组按次序排列的值
  - '北京'
  - '上海'
  - '广州'

2.3 读取配置

2.3.1 @Value

方式1: @Value (了解) 此注解是Spring框架提供的,用来读取配置文件中的属性值并逐个注入到Bean对象的对应属性中

注意:不要使用 user.name 这个键被操作系统占用了

2.3.2 @ConfigurationProperties

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

复制代码
添加下面依赖可以解决图中的红色提示
​
 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

② 在使用的地方直接注入配置类

2.4 多环境配置

在实际开发中,项目的开发环境、测试环境中配置可能不一致,因此SpringBoot支持多环境配置

开发环境 dev - 本机电脑,eg:localhost:8080 ,localhost:3306

测试环境 test - 测试服务器 eg:192.168.110.128.8081、192.168.110.129.3306

生产环境 prod - 生产服务器,eg:10.123.12.110:8082

多环境 对应 多配置文件

dev - application - dev.yml

tset - application - test.yml

prod - application - prod.yml

在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>

命令格式传递参数(打开包所在文件,cmd执行黑窗口,输入下面命令)

复制代码
java –jar springboot.jar --spring.profiles.active=test     # 指定使用test环境 
java –jar springboot.jar --spring.profiles.active=test --server.port=9090  # 指定使用test环境,端口号为9090

三、 常见功能

3.1 日志输出

Spring支持多种日志级别,通过配置文件,可以输出指定级别的日志

XML 复制代码
# 包名: 日志级别(常用的级别有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

③ 访问测试

3.2 单元测试

① 引入依赖

在pom.xml加入单元测试的starter

XML 复制代码
<!--引入junit依赖启动器-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
</dependency>

② 编写测试类

注意测试类的位置: 必须在启动类所在包之下

3.3 静态资源

现在项目是一个普通java工程,没有webapp,那么静态资源应该放哪里呢?

SpringBoot默认的静态资源是在classpath:/static/ 目录

四、综合案例

4.1 整合Mybatis

4.1.1 数据准备

创建数据库和表

复制代码
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','东土大唐');

4.1.2 添加依赖

在pom.xml中加入下面依赖

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>

4.1.3 创建实体类

4.1.4 创建启动类并添加接口扫描

创建启动类,并在启动类上使用@MapperScan注解指定mapper接口所在的包

4.1.5 添加配置文件

新建配置文件application.yaml,添加数据源和mybatis的配置

XML 复制代码
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 # 开启驼峰式映射

4.1.6 导入前端页面

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

4.2 列表查询

4.2.1 controller层

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

4.2.2 service层

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

4.2.3 mapper层

添加mapper层,创建接口实现数据库操作

4.2.4 查看运行结果

通过页面控制台可以看出,已经获取了数据库中的数据,并返回给了前端,却没有显示在页面

查看前端代码,发现前后端的响应并未实现一一对应

4.3 统一返回结果

4.3.1 思路

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

4.3.2 添加结果类

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

4.3.3 修改controller层

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

4.3.4 查看效果

访问首页,观察效果

4.3.5 调整返回时间格式

目前返回的结果中时间格式有问题,需要重新设置下

在Student实体类的birthday变量上面添加如下注释:

@JsonFormat(pattern = "yyyy-MM-dd",timezone = "Asia/Shanghai")

4.3.6 查询学生列表效果

4.4 新增学生

4.4.1 controller层

4.4.2 service层

4.4.3 mapper层

4.5 回显学生(根据id查询学生信息)

4.5.1 controller层

4.5.2 service层

4.5.3 mapper层

4.6 修改学生

4.6.1 controller层

4.6.2 service层

4.6.3 mapper层

4.7 删除学生

4.7.1 controller层

4.7.2 service层

4.7.3 mapper层

相关推荐
许苑向上2 小时前
MVCC底层原理实现
java·数据库·mvcc原理
组合缺一2 小时前
Solon Cloud Gateway 开发:熟悉 ExContext 及相关接口
java·后端·gateway·solon
一只淡水鱼662 小时前
【spring】集成JWT实现登录验证
java·spring·jwt
微臣愚钝3 小时前
前端【8】HTML+CSS+javascript实战项目----实现一个简单的待办事项列表 (To-Do List)
前端·javascript·css·html
忘忧人生3 小时前
docker 部署 java 项目详解
java·docker·容器
null or notnull3 小时前
idea对jar包内容进行反编译
java·ide·intellij-idea·jar
lilu88888884 小时前
AI代码生成器赋能房地产:ScriptEcho如何革新VR/AR房产浏览体验
前端·人工智能·ar·vr
LCG元4 小时前
Vue.js组件开发-实现对视频预览
前端·vue.js·音视频
阿芯爱编程4 小时前
vue3 react区别
前端·react.js·前端框架
言午coding4 小时前
【性能优化专题系列】利用CompletableFuture优化多接口调用场景下的性能
java·性能优化