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层

相关推荐
尘浮生9 分钟前
Java项目实战II基于微信小程序的校运会管理系统(开发文档+数据库+源码)
java·开发语言·数据库·微信小程序·小程序·maven·intellij-idea
小白不太白95013 分钟前
设计模式之 模板方法模式
java·设计模式·模板方法模式
Tech Synapse15 分钟前
Java根据前端返回的字段名进行查询数据的方法
java·开发语言·后端
.生产的驴16 分钟前
SpringCloud OpenFeign用户转发在请求头中添加用户信息 微服务内部调用
spring boot·后端·spring·spring cloud·微服务·架构
xoxo-Rachel22 分钟前
(超级详细!!!)解决“com.mysql.jdbc.Driver is deprecated”警告:详解与优化
java·数据库·mysql
乌啼霜满天24924 分钟前
JDBC编程---Java
java·开发语言·sql
微信-since8119232 分钟前
[ruby on rails] 安装docker
后端·docker·ruby on rails
Myli_ing34 分钟前
考研倒计时-配色+1
前端·javascript·考研
色空大师36 分钟前
23种设计模式
java·开发语言·设计模式