目录
什么是Springboot?
SpringBoot是 Spring 开源组织下的子项目,是Spring组件一站式解决方案,主要是简化了使用Spring的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手
搭建Springboot环境
方法一:联网情况下
该步骤需要在联网的环境下,假如idea不能联网,也可以通过spring官网创建工程,idea创建Springboot工程其实连接的还是springboot官网,读取到spring官网的信息,然后展示到idea中。
步骤①:创建新模块,选择Spring Initializr,并配置模块相关基础信息。
步骤②:选择当前模块需要使用的技术集
方法二:倘若spring官网也不能访问,怎么创建工程
创建工程时,切换选择starter服务路径,然后手工收入阿里云提供给我们的使用地址即可。地址:http://start.aliyun.com或https://start.aliyun.com
方法三:电脑不能联网,该如何创建工程
该步骤仅仅对于创建工程不用联网,具体的坐标如果仓库没有,也需要联网下载
步骤①:创建工程时,选择手工创建Maven工程
步骤②:参照标准SpringBoot工程的pom文件,手工导入坐标依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.10</version>
</parent>
<groupId>com.itheima</groupId>
<artifactId>springboot_01_04_quickstart</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
SpringBoot请求参数的处理
简单参数
在Springboot的环境中,对原始的API进行了封装,接收参数的形式更加简单。 如果是简单参数,参数名与形参变量名相同,定义同名的形参即可接收参数。
@RestController
public class RequestController {
// http://localhost:8080/simpleParam?name=Tom&age=10
// 第1个请求参数: name=Tom 参数名:name,参数值:Tom
// 第2个请求参数: age=10 参数名:age , 参数值:10
//springboot方式
@RequestMapping("/simpleParam")
public String simpleParam(String name , Integer age ){//形参名和请求参数名保持一致
System.out.println(name+" : "+age);
return "OK";
}
}
实体参数
@RequestParam中的required属性默认为true(默认值也是true),代表该请求参数必须传递,如果不传递将报错,如果赋了value值,则传递的参数必须是其别名
@RestController
public class RequestController {
// http://localhost:8080/simpleParam?name=Tom&age=20
// 请求参数名:name
//springboot方式
@RequestMapping("/simpleParam")
public String simpleParam(@RequestParam("name") String username , Integer age ){
System.out.println(username+" : "+age);
return "OK";
}
}
@RestController
public class RequestController {
//实体参数:简单实体对象
@RequestMapping("/simplePojo")
public String simplePojo(User user){
System.out.println(user);
return "OK";
}
}
数组集合参数
多个值是怎么提交的呢?其实多个值也是一个一个的提交。后端接收上述多个值的方法有两种,一种是集合一种是数组。
用数组接收多个不同值
用集合接收多个不同值,用@RequestParam 绑定参数关系
日期参数
因为日期格式不统一,所以在传输时会出现格式不统一的问题,那么controller在接收时可以使用注解@DateTimeFormat注解来约束格式
JSON参数
JSON格式的数据是放在请求体中传输。接收和发送JSON的数据需要使用注解@RequestBody和@ResponseBody来发送。
@RestController
public class RequestController {
//JSON参数
@RequestMapping("/jsonParam")
public String jsonParam(@RequestBody User user){
System.out.println(user);
return "OK";
}
}
路径参数
在现在的开发中,经常还会直接在请求的URL中传递参数。例如:
http://localhost:8080/user/1
http://localhost:880/user/1/0
parent
springboot官方将所有的技术版本的常见使用方案都整理起来,开发者以后直接使用它提供的方案,就不用担心版本冲突问题了。parent仅仅帮助我们做了依赖管理,并不帮助导入坐标
springboot如何做到这一点?
项目中的pom.xml中继承了一个坐标,打开之后发现,其又继承了另一个坐标,这个坐标中定义了两组信息,第一组是各式各样的依赖版本号属性,第二组是各式各样的的依赖坐标信息
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.4</version>
</parent>
starter--起步依赖
把所有的技术使用的固定搭配格式都给开发出来,以后你用某个技术,就不用一次写一堆依赖了,还容易写错,对于这样的固定技术搭配,SpringBoot给它起了个名字叫做starter。parent就是用于服务starter的,在实际的开发中,如果有对应的starter,直接写starter,而且无需指定版本,版本由parent提供。如果没有对应的starter,手写坐标即可。
格式:
命名规则:spring-boot-starter-技术名称
引导类
我们发现SpringBoot确实帮助我们减少了很多配置工作,下面说一下程序是如何运行的。目前程序运行的入口就是SpringBoot工程创建时自带的那个类了,带有main方法的那个类,运行这个类就可以启动SpringBoot工程的运行。
@SpringBootApplication
public class Springboot0101QuickstartApplication {
public static void main(String[] args) {
SpringApplication.run(Springboot0101QuickstartApplication.class, args);
}
}
更换内嵌的Tomcat服务器
想用哪个,加个坐标就OK。前提是把tomcat排除掉,因为tomcat是默认加载的。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
</dependencies>
SpringBoot基础配置
SpringBoot默认配置文件是application.properties。SpringBoot中导入对应starter后,提供对应配置属性
关闭运行日志图表(banner)
spring.main.banner-mode=off
设置运行日志的显示级别
logging.level.root=debug
配置日志输入
用于输出SQL语句的执行过程和结果
#指定mybatis输出日志的位置, 输出控制台
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
但是我们发现输出的SQL语句:delete from emp where id = ?,我们输入的参数16并没有在后面拼接,id的值是使用?进行占位。那这种SQL语句我们称为预编译SQL。
预编译SQL
参数占位符
在Mybatis中提供的参数占位符有两种:${...} 、#{...}
${...}存在sql注入的安全问题,会直接将参数拼接到SQL语句。并且不会对单引号做处理
#{...}执行SQL时,会将#{…}替换为?,生成预编译SQL,会自动设置参数值。它会对单引号转义成普通的字符串,避免SQL注入。
yaml文件
YAML,一种数据序列化格式。具有容易阅读、容易与脚本语言交互、以数据为核心,重数据轻格式的特点。
语法格式:
-
大小写敏感
-
属性层级关系使用多行描述,每行结尾使用冒号结束
-
使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)
-
属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
yaml数据读取
读取单一数据
yaml中保存的单个数据,可以使用Spring中的注解直接读取,使用@Value可以读取单个数据,属性名引用方式:${一级属性名.二级属性名……}
读取全部数据
SpringBoot提供了一个对象,能够把所有的数据都封装到这一个对象中,这个对象叫做Environment,使用自动装配注解可以将所有的yaml数据封装到这个对象中