# SpringBoot
**Repository Path**: amespaces/spring-boot
## Basic Information
- **Project Name**: SpringBoot
- **Description**: study SpringBoot
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2022-04-11
- **Last Updated**: 2022-07-04
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
https://gitee.com/amespaces/spring-boot.git
[TOC]
# SpringBoot简介
## 入门案例
- SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来**简化Spring应用的初始化搭建以及开发过程**
选择springweb
直接做开发控制器
运行application
- 快速执行,直接package,jar包使用cmd java -jar 包名(有插件的)
## 配置文件
1.application.properties
```xml
server.port=80
```
2.applicaton.yml
```
server;
port:80//有个空格
```
3.application.yaml
```
server;
port:80//有个空格
```
- 如果三个文件都有以先1后2再3的顺序
- 后面的yaml和yml需要自己配置,解决提示消失问题
## yaml语法规则
- 大小写敏感
- 属性层级该安息使用多行描述,每行结尾使用冒号结束
- 使用缩进表示层级关系,同级左侧对齐,只允许使用空格(不允许tab)
- /# 表示注释/
- 注意:数据前面要加空格
application.yaml
```
lesson: SpringBoot
server:
port: 80
enterprise:
name: itcast
age: 18
tel: 183
subject:
- java
- 前端
- 后端
```
- 数组数据再数据书写位置的下方使用减号作为数据开始符号,每行书写一个数据,减号与数据间空格分隔
## yaml数据格式读取方式
```java
package com.example.springboot_01_quickstart.controller;
import com.example.springboot_01_quickstart.domain.Enterprise;
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.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/books")
public class BookController {
//方式一
@Value("${lesson}")
private String lesson;
@Value("${server.port}")
private String port;
@Value("${enterprise.subject[0]}")
private String subject_0;
//方式二使用enviroment
@Autowired
private Environment environment;
//方式三 使用bean
@Autowired
private Enterprise enterprise;
@GetMapping("/{id}")
public String getByid(@PathVariable Integer id){
System.out.println(lesson);
System.out.println(environment.getProperty("lesson"));
System.out.println(environment.getProperty("server.port"));
System.out.println(environment.getProperty("enterprise.subject[0]"));
System.out.println("---------------");
System.out.println(enterprise.getAge());
System.out.println(enterprise.getName());
System.out.println("id=>"+id);
return "hello,springboot";
}
}
```
方式三自定义对象封装数据
```java
package com.example.springboot_01_quickstart.domain;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.Arrays;
@Component
@ConfigurationProperties(prefix = "enterprise")
public class Enterprise {
private String name;
private Integer age;
private String tel;
private String[] subject;
@Override
public String toString() {
return "Enterprise{" +
"name='" + name + '\'' +
", age=" + age +
", tel='" + tel + '\'' +
", subject=" + Arrays.toString(subject) +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public String[] getSubject() {
return subject;
}
public void setSubject(String[] subject) {
this.subject = subject;
}
}
```
- 自定义对象分装数据警告解决方案
```xml
org.springframework.boot
spring-boot-configuration-processor
true
```
## 多环境开发配置
### 多环境启动命令格式
```yaml
#测试
spring:
profiles:
active: test
server:
port: 80
```
- 带参数启动SpringBoot
```
java -jar springboot.jar --spring.profiles.active=test
java -jar springboot.jar --server.port=88
//整合一起就是
java -jar springboot.jar --server.port=88 --spring.profiles.active=test
```
### 参数加载优先级
### 多环境开发控制
maven? boot?
pom.xml中
```xml
dev
pro
true
test
```
```yaml
#设置启用环境
spring:
profiles:
active: dev
---
#开发
spring:
profiles: dev
server:
port: 80
---
#生产
spring:
profiles: pro
server:
port: 81
---
#
spring:
profiles: test
server:
port: 82
---
```
使用java - jar .... 端口为80,说明dev生效,pom里面的pro生效并没有生效
解决
```xml
dev
dev
pro
pro
true
test
test
```
```
#设置启用环境
spring:
profiles:
active: ${profile.active}
---
#开发
spring:
profiles: dev
server:
port: 80
---
#生产
spring:
profiles: pro
server:
port: 81
---
#
spring:
profiles: test
server:
port: 82
---
```
现在执行的8080端口,因为现在的pom不能干预配置文件
添加插件
```xml
true
```
### 配置文件分类
- SpringBoot中4级配置文件
1级: file: config/application.yml [最高]
2级: file: application.yml
3级: classpath: config/application.yml
4级: classpath: application.yml
## 整合第三方技术
### 整合JUnit
@SpringBootTest
如果测试类在SpringBoot启动类的包或子包中,可以省略启动类的设置,也就是省略classes的设定
### 整合Mybatis
1.导入模块
2.导入所需技术集(mybatis\mysql)
3.设置数据源参数
```yaml
spring:
datasource:
driver-lass-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost;3306/mybatis
username: root
password: 1234
type: com.alibaba.druid.pool.DruidDataSource
#记得添加druid坐标
#注意SpringBoot版本低于2.4.3mysql驱动大于8.0需要在url连接串中配置时区
```
@Mapper
### 基于SpringBoot的ssm整合案例
1. pom.xml
配置起步依赖,必要的资源坐标
2. application.yaml
设置数据源参数端口等
3. 配置类
不需要
4. dao
设置@Mapper
5. 测试类
# Mybatis Plus
## 简介
### 入门案例
- MybatisPlus简称MP是基于Mybatis框架基础上开发的增强型工具,简化开发、提高效率
- 定义数据接口
```java
@Mapper
public interface UserDao extends BaseMapper {
}
```
```xml
com.baomidou
mybatis-plus-boot-starter
3.4.0
com.alibaba
druid
1.1.16
```
application.yml
```yml
spring:
datasource:
driver-lass-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC
username: root
password: 1234
type: com.alibaba.druid.pool.DruidDataSource
#记得添加druid坐标
#注意SpringBoot版本低于2.4.3mysql驱动大于8.0需要在url连接串中配置时区
```
## 标准数据层开发
工具lombok
```xml
org.projectlombok
lombok
1.18.20
```
### 条件查询的三种格式
```java
package com.itheima.mybatisplus_02_dql;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.itheima.mybatisplus_02_dql.dao.UserDao;
import com.itheima.mybatisplus_02_dql.domain.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.sql.Wrapper;
import java.util.List;
@SpringBootTest
class Mybatisplus02DqlApplicationTests {
@Autowired
private UserDao userDao;
@Test
void testGetAll(){
//按条件查询,第一次种方式
QueryWrapper wrapper = new QueryWrapper();
wrapper.lt("age",18);
List users = userDao.selectList(wrapper);
System.out.println(users );
}
@Test
void testGetAll2(){
//方式二 ,lambda格式
QueryWrapper wrapper = new QueryWrapper<>();
wrapper.lambda().lt(User::getAge,18);
List users = userDao.selectList(wrapper);
System.out.println(users);
}
@Test
void testGetAll3(){
//方式三lambda格式
LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper();
lambdaQueryWrapper.lt(User::getAge,18);
List users = userDao.selectList(lambdaQueryWrapper);
System.out.println(users);
}
}
```
### 多条件查询
```java
@Test
void testGetAll3(){
//方式三lambda格式
LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper();
//10—30岁之间
// lambdaQueryWrapper.lt(User::getAge,10).gt(User::getAge,30);
//<10 or >30
lambdaQueryWrapper.lt(User::getAge,10).or().gt(User::getAge,30);
List users = userDao.selectList(lambdaQueryWrapper);
System.out.println(users);
}
```
### 条件查询null值判定
```java
@Test
void testGetUser(){
//模拟页面传递过来的查询数据
UserQuery userQuery = new UserQuery();
userQuery.setAge(10);
userQuery.setAge2(30);
//null判定
LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>();
// lambdaQueryWrapper.lt(User::getAge,userQuery.getAge2());
//先判定第一个参数是否为true,如果为true连接当前条件
lambdaQueryWrapper.lt(null!=userQuery.getAge2(),User::getAge,userQuery.getAge2());
lambdaQueryWrapper.gt(null!=userQuery.getAge(),User::getAge,userQuery.getAge());
List users = userDao.selectList(lambdaQueryWrapper);
System.out.println(users);
}
```
### 查询投影
1.查询结果包含模型类种的部分属性
只适用于lambda格式
```java
LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.select(User::getId,User::getName,User::getPassword);
List users = userDao.selectList(lambdaQueryWrapper);
System.out.println(users);
}
```
2.查询结果包含模型类中未定义的属性
```java
QueryWrapper qm = new QueryWrapper();
qm.select("count(*) as count, tel ");
qm.groupBy("gender");
List