2、REST风格
-
REST(Representational State Transfer),表现形式状态转换
-
传统风格资源描述形式
-
http:/localhost/user/saveUser
-
REST风格描述形式
-
-
优点:
-
隐藏资源的访问行为,无法通过地址得知资源是何种操作
-
书写简化
-
-
按照REST风格访问资源时使用行为动作区分对资源进行了何种操作
-
http://localhost/users 查询全部用户信息 GET(查询)
-
http://localhost/users/1 查询指定用户信息 GET(查询)
-
http://localhost/users 添加用户信息 POST(新增/保存)
-
http://localhost/users 修改用户信息 PUT(修改/更新)
-
http://localhost/users/1 删除用户信息 DELETE(删除)
-
-
根据REST风格对资源进行访问称为RESTful
注意事项
上述行为是约定方式,约定不是规范,可以打破,所以称为REST风格,而不是REST规范
描述模块的名称通常使用复数,也就是加s的格式描述,表示此类资源,而非单个资源,例如:users、books、accounts...
2.1、RESTful快速开发
-
名称:@RestController
-
类型:类注解
-
位置:基于SpringMVC的RESTful开发控制器类定义上方
-
作用:设置当前控制器类为RESTful风格,等同于@Controller与@ResponseBody两个注解组合功能
-
范例:
-
@RestController public class BookController{ }
-
-
名称:@GetMapping @PostMapping @PutMapping @DeleteMapping
-
名称:方法注解
-
位置:基于SpringMVC的RESTful开发控制器方法定义上方
-
作业:设置当前控制器方法请求访问路径与请求动作,每种对应一个请求动作,例如@GetMapping对应GET请求
-
范例
-
@GetMapping("/{id}") public String getById(@PathBariable Integer id){ System.out.println("book getById..."+id) return "{'module':'book getById'}"; }
-
-
属性
-
value(默认):请求访问路径
-
3、SpringBoot复制模块快速开发
1,在工作空间中复制模块,修改模块名称
2,删除与idea相关的配置文件,仅保留src目录和pom.xml文件
3,修改pom.xml文件中的artifactId与新模块名相同
4,删除name标签(可选)
5,保留备份模块后期使用
4、3种配置文件
-
SpringBoot提供了多种属性配置方法
-
application.properties(传统格式/默认格式)
-
server.port=80
-
-
application.yml(主流格式)
-
server:
-
port:81
-
-
application.yaml
-
server:
-
prot:82
-
-
-
Spring Boot配置文件加载顺序
-
application.properties > application.yml > application.yaml
-
如果有同样的属性配置则选择加载顺序最大的,对于其他的取三者的并集,不同配置文件中的相同配置全部保留
-
4.1、YAML
YAML(YAML Ain't Markup Language),一种数据序列化格式
-
优点
-
容易阅读
-
容易与脚本语言交互
-
以数据为核心,重数据轻格式
-
-
YAML文件扩展名
-
.yml(主流)
-
.yaml
-
-
yaml语法规则
-
大小写敏感
-
属性层级关系使用多行描述,每行结尾使用冒号结束
-
使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用tab键)
-
属性值前加空格(属性名与属性值之间使用冒号+空格作为分隔)
-
#表示注释
-
-
核心规则:数据前面要加空格与冒号隔开
#举例:
enterprise:
name: itcast
age: 12
tel: 12345678
#数组
subject:
- java
- 前端
- 后端
likes: [java,html]
#对象数组
users:
- name: tom
age: 12
- name: jone
age: 13
#对象数组格式二
users:
-
name: tom
age: 12
-
name: jone
age: 13
users2: [{ name: tom,age: 12},{name: toms,age: 122}] #对象数组书写缩略格式
yaml语法规则:字面值表示方式
-
boolean: TRUE #TRUE,true,True,FALSE,false,False均可 float: 3.14 #6.234235234e+5 支持科学计数法 int: 123 #0b1010_0111_0101_1110 支持二进制、八进制、十六进制 null: ~ #使用~表示null String: helloworld #字符串可以直接书写 String2: "hello world" #可以使用双引号包裹特殊字符 date: 2022-04-09 #日期必须使用yyyy-MM-dd格式 datetime: 2022-04-09T16:03:22+08:00 #时间和日期之间使用T连接,最后使用+代表时区
4.2、yml数据读取
第一步:在resource目录下新建一个application.yml文件,写入以下测试数据
#修改服务器默认端口号
server:
port: 80
lesson: SpringBoot
enterprise:
name: jack
age: 19
tel: 12345656
subject:
- java
- css
- js
- 大数据
likes: [game,music,shoopping]
baseDir: c:\windows
#使用${属性名}引用数据
tempDir: ${baseDir}\temp
#把/t变成转义字符,用双引号包裹
tempDir2: "${baseDir}\temp \t1 \t2 \t3"
datasource:
driver: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost/springboot_db
username: root
password: root
第二步:新建一个controller包下的Controller类(测试的时候运行程序,然后在浏览器请求hello看控制台输出)
package com.yi.controller;
import com.yi.MyDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
//Rest模式
@RestController
@RequestMapping("/hello")
public class helloController {
@Value("${server.port}")
private String port;
@Value("${lesson}")
private String lessonName;
@Value("${enterprise.name}")
private String name;
@Value("${enterprise.subject[0]}")
private String subject_00;
@Value("${likes[1]}")
private String likes1;
@Value("${tempDir}")
private String tempDir;
@Value("${tempDir2}")
private String tempDir2;
//————————————————————————————//
//使用自动装配将所有的数据封装到一个对象Environment中
@Autowired
private Environment env;//注意导包问题
@Autowired
private MyDataSource myDataSource;
@GetMapping
public String getById(){
System.out.println("port===>"+port);
System.out.println("lessonName===>"+lessonName);
System.out.println("name===>"+name);
System.out.println("subject_00===>"+subject_00);
System.out.println("likes1===>"+likes1);
System.out.println("tempDir===>"+tempDir);
System.out.println("tempDir2===>"+tempDir2);
System.out.println("--------------------");
System.out.println(env.getProperty("server.port"));
System.out.println(env.getProperty("enterprise.name"));
System.out.println("---------------------------");
System.out.println(myDataSource);
return "hello springboot...base";
}
}
5、SpringBoot整合MybatisPlus日志开启
mybatis-plus:
configuration:
#开启日志
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
6、整合druid
先在pom.xml中导入druid依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.8</version>
</dependency>
在application.yml配置文件中配置
#配置相关信息
#spring:
# datasource:
# driver-class-name: com.mysql.cj.jdbc.Driver
# url: jdbc:mysql://localhost:3306/mypro
# username: root
# password: 999
# type: com.alibaba.druid.pool.DruidDataSource
#下面这个是标准的Druid整个配置
spring:
datasource:
druid:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mypro
username: root
password: 999
7、常用maven依赖
mybatisplus依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3</version>
</dependency>
德鲁伊
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.8</version>
</dependency>
Lombok
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
8、配置数据层yml
#服务器端口
server:
port: 80
#配置德鲁伊连接池,连接本地数据库
spring:
datasource:
druid:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
username: root
password: 999
mybatis-plus:
global-config:
db-config:
table-prefix: tbl_ #表名前缀
id-type: auto #id自动生成策略
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #配置mp日志
9、表现层消息一致性处理
-
设计表现层返回结果的模型类,用于后端与前端进行数据格式统一,也成为前后端数据协议
package com.yi.utils;
import lombok.Data;
@Data
public class R {
private Boolean flag;
private Object data;
private String msg;
public void R(){
}
public R(Boolean flag) {
this.flag = flag;
}
public R(Boolean flag,Object data) {
this.flag = flag;
this.data = data;
}
public R(Boolean flag,String msg) {
this.flag = flag;
this.msg = msg;
}
public R(String msg) {
this.flag = false;
this.msg = msg;
}
}
10、SpringBoot项目快速启动(windows版本)
-
对SpringBoot项目打包(执行Maven构建指令package)
-
mvn package
-
-
在打包的jar包目录下,打开cmd窗口
-
运行:java -jar springboot.jar
-
11、SpringBoot打包问题
-
如果打包后运行出现:xxx(打包的项目名).jar中没有主清单属性,则在pom.xml里加下面的代码
-
使用SpringBoot提供的maven插件可以将工程打包乘可执行jar包
-
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
-
12、Windows端口占用问题
-
在运行springboot程序的时候,如果显示端口被占用(下面的命令是在cmd下的)
-
#查询端口 netstat -ano #查询指定端口 netstat -ano |findstr "端口号" #根据进程PID查询进程名称 tasklist |findstr "进程PID号" #根据PID杀死任务 taskkill /F /PID "进程PID号" #根据进程名称杀死任务 taskkill -f -t -im "进程名称"
-
13、手动启动热部署
-
在pom.xml文件添加下面的依赖
-
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency>
激活热部署:在idea里快捷键-->Ctrl+F9
-