Sprint Boot 3.2.0 基础知识

Sprint Boot 3.2.0

1. 简介

  • Bean:在Spring Boot中,Bean是一个被Spring容器管理的Java对象。 当Spring容器启动时,它会读取应用程序的配置文件(如application.properties或application.yml)并创建所有的Bean。 开发者可以在配置文件中定义Bean,也可以使用注解的方式定义Bean。

  • ioc容器:ioc容器是指由spring来负责控制对象的生命周期和对象间的关系。 ioc容器全称Inversion of Control

  • SpringBoot3+Vue3实战教学
    在这里插入图片描述
    在这里插入图片描述

  • 视频教程1

  • 视频教程2

  • 特点:

    • Spring Cloud带动了Spring Boot
    • Spring Boot成就了Spring Cloud

1.1 实现结果的优雅响应

1.2 SpringBoot3.x使用Swagger

1.3 Spring Boot 3.x 系列教程

1.4 MySQL数据库

1.5 SpringBoot3访问数据库

1.6 SpringBoot3集成Druid

1.7 SpringBoot3集成MyBatis-Plus

1.8 开发环境

软件版本
JDK17.0.2 2022-01-18 LTS
Maven3.9.6
IDEA2023.3
SpringBoot3.2.0
druid-spring-boot-3-starter1.2.20
MySQL Community Server8.0.35

1.9 POJO与JavaBean的区别

  • POJO (Plain Ordinary Java Object)
    • 简单普通的java对象。主要用来指代那些没有遵循特定的java对象模型,约定或者框架的对象。
    • 有一些private的参数作为对象的属性,然后针对每一个参数定义get和set方法访问的接口。
    • 没有从任何类继承、也没有实现任何接口,更没有被其它框架侵入的java对象。
    • 有时可以作为VO(value-object)或DTO(Data Transfer Object)来使用。
    • 不允许有业务方法,也不能携带connection之类的方法。
  • JavaBean
    • 是一种JAVA语言写成的可重用组件。JavaBean符合一定规范编写的Java类,不是一种技术,而是一种规范。大家针对这种规范,总结了很多开发技巧、工具函数。符合这种规范的类,可以被其它的程序员或者框架使用。它的方法命名,构造及行为必须符合特定的约定:
      • 所有属性为private
      • 这个类必须有一个公共的缺省构造函数,即提供无参数的构造器。
      • 这个类的属性使用getter和setter来访问,其他方法遵从标准命名规范。
      • 这个类应是可序列化的,实现serializable接口。
  • POJO与JavaBean的用途差异
    • POJO主要用于数据的临时传递,它只能装载数据,作为数据存储的载体,而不具有业务逻辑处理的能力。
    • Javabean虽然数据的获取与POJO一样,但是javabean当中可以有其它的方法
  • Entity
    • 就是属性类,通常定义在model层里面
    • 一般的实体类对应一个数据表,其中的属性对应数据表中的字段。

1.10 Bean管理

1.10.1 Bean扫描

  • 在启动类中实现 @ComponentScan
    在这里插入图片描述

1.10.2 Bean注册(@Bean)

  • 可通过下面的注解把此类的对象注册到IOC容器中
    在这里插入图片描述
  • 通过mvn安装第三方jar包
mvn install:install-file -Dfile=D:\test.jar -DgroupId=com.kk -DartifactId=my-test -Dversion=1.0 -Dpackaging=jar
  • 在main中通过@Bean注入第三方包中的Bean, 但不建议采用
    在这里插入图片描述
    在这里插入图片描述
  • 在Config类中注入第三方包中的Bean对象
    在这里插入图片描述
    在这里插入图片描述

1.10.3 Bean注册(@Import)

在这里插入图片描述

1.10.4 条件注册

  • 通过@Value读取application.yml中的内容
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

1.9 SpringBoot3+Vue3 前后端分离项目

1.10 Mybatis架构与原理

2. 搭建开发环境(Win11)

2.1 安装JDK 17

  • 下载JDK17压缩包jdk17.zip
  • 解压jdk17.zip
  • 设置Windows环境变量
# 新建系统变量
JAVA_HOME  #变量值:D:\Tools\SpringBoot\jdk17
#编辑系统变量
Path        #添加变量值: %JAVA_HOME%\bin

2.2 安装Maven

  • 下载压缩包apache-maven-3.9.6-bin.zip
  • 解压apache-maven-3.9.6-bin.zip
  • 设置Windows环境变量
# 新建系统变量
MAVEN_HOME  #变量值:D:\Tools\SpringBoot\apache-maven-3.9.6
#编辑系统变量
Path        #添加变量值: %MAVEN_HOME%\bin

2.3 安装IntelliJ IDEA 2023.3

  • 下载IntelliJ IDEA 2023.3 安装包
  • 执行安装

2.4 IDEA 最优开发配置

3. 常用知识点

3.1 @RestController 和 @RequestMapping 注解

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@SpringBootApplication
public class MyApplication {
    @RequestMapping("/")
    String home() {
        return "Hello World!";
    }
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}
  • MyApplication 类上的第一个注解是 @RestController 。 这被称为 stereotype 注解。 它为阅读代码的人和Spring提供了提示,说明这个类扮演了一个特定的角色。 在本例中,我们的类是一个web @Controller ,所以Spring考虑使用它来处理客户端的web请求。
    • @RequestMapping: 注解提供了 “routing” (路由)信息。 它告诉Spring,任何带有 / 路径的HTTP请求都应该被映射到 home 方法。
    • @RestController: 注解告诉Spring将返回的结果字符串直接响应给客户端。

3.2 Lombok插件

  • Lombok 可用来帮助开发人员消除 Java 的重复代码,尤其是对于简单的 Java 对象(POJO),比如说getter/setter/toString等方法的编写。它通过注解实现这一目的。
  • IDEA 2023.3 内置Lombok,不需要另外安装,创建Project时选中Lombok Plugin即可。

3.3 IntelliJ IDEA一个窗口打开多个项目

3.4 热部署

  • 项目中引入依赖 DevTools
  • 当修改类文件后,IDEA需要自动编译:
    • File->Settings->Compiler->【Build Project Automatically】 (勾选)
    • File->Settings -> Advanced Settings ->【Allow auto-make to start even if developed application is current running】 (勾选)
      在这里插入图片描述

3.5 日志

3.5.1 日志桥接

在这里插入图片描述

3.5.2 日志转换

在这里插入图片描述

3.5.3 SpringBoot底层日志

  • SpringBoot底层日志使用slf4j+logback的方式记录日志
    • logback桥接:logback-classic
  • SpringBoot把其它日志都替换成了slf4j
    • log4j适配:log4j-over-slf4j
    • jul适配:jul-to-slf4j
    • jcl-over-slf4j

3.5.4 配置日志

logging.level.root = "info"
logging.level.web = "warn"
logging.level.com.example = "trace"

# Log to File
logging.file.name= ./app.log

# Log Patterns
#logging.pattern.console=%d{yyyy-MMM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n
#logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%
#logging.pattern.console="[%d{yyyy-MM-dd HH:mm:ss.SSS}] %-5level [%thread] [%logger - %line]: %m%n"
logging.pattern.console="%clr(%d{{LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr({LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n"
logging.pattern.file="[%d{yyyy-MM-dd HH:mm:ss.SSS}] %-5level [%thread] [%logger - %line]: %m%n"
  • 系统默认配置
logging.pattern.console="%clr(%d{{LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr({LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n"
  • 参数含义如下:
    • %d用于输出日期时间
    • %p用于输出日志级别
    • %t用于输出线程名
    • %logger用于输出Logger名称
    • %m用于输出日志消息
    • %n用于输出换行符
    • %clr用于添加ANSI颜色控制码
      • %clr 内容 {faint}, 设置内容为faint颜色,即白色,颜色可以设置为:blue, cyan, faint, green, magenta, red, yellow

3.6 yml配置信息书写与读取

  • yml配置信息规范

    • 值前面必须有空格,作为分隔符
    • 使用空格作为缩进表示层级关系,相同的层级左侧对齐
      在这里插入图片描述
      在这里插入图片描述
  • yml中定义数组

tools:
  - C/C++
  - Java
  - SpringBoot
  - MySQL

4. SpringBoot的常用注解

4.1 MVC结构和三层结构

在这里插入图片描述

4.2 @SpringBootApplication

  • 用于标识SpringBoot应用程序的入口类。

4.2.1 说明

@SpringBootApplication是SpringBoot应用程序的核心注解,通常用于主类上。它包含了以下三个注解:

  • @Configuration:表示该类是一个配置类,用于定义Spring的配置信息。
  • @EnableAutoConfiguration:表示启用自动配置,SpringBoot会根据项目中的依赖自动配置相应的组件。
  • @ComponentScan:表示启用组件扫描,SpringBoot会自动扫描当前包及其子包下的所有组件。

4.3 @RestController

  • 与@Controller类似,但是@RestController会自动将返回值转换为JSON格式。

4.3.1 说明

@RestController是一个组合注解,用于定义RESTful风格的Web服务。它包含了以下两个注解:

  • @Controller:表示该类是一个控制器类,用于处理HTTP请求。
  • @ResponseBody:表示将方法返回值作为HTTP响应体,而不是视图名称。
  • 与@Controller类似,但是@RestController会自动将返回值转换为JSON格式。

4.3.2 示例

在控制器类上添加@RestController注解,然后在方法上添加相应的HTTP请求映射注解,例如:@GetMapping、@PostMapping等。

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello() {
        return "Hello, SpringBoot!";
    }
}

4.4 @Autowired

  • 用于自动装配Spring容器中的Bean

4.4.1 说明

@Autowired是Spring的核心注解之一,用于实现依赖注入。它可以自动装配Bean,无需手动创建和管理对象。

4.4.2 示例

- 在需要注入的字段、构造方法或者Setter方法上添加@Autowired注解。 
@RestController
public class UserController {
    @Autowired
    private UserService userService;

    @GetMapping("/users")
    public List<User> getUsers() {
        return userService.getUsers();
    }
}

4.5 @Component

4.5.1 说明

@Component是Spring的核心注解之一,用于定义组件。它表示该类是一个Spring管理的Bean,可以被自动扫描和装配。

4.5.2 示例

在类上添加@Component注解,然后在需要注入的地方使用@Autowired注解。

@Component
public class UserService {
    public List<User> getUsers() {
        // ...
    }
}

4.6 @Configuration

4.6.1 说明

@Configuration是Spring的核心注解之一,用于定义配置类。它表示该类是一个Java配置类,可以用来替代XML配置文件。

4.6.2 示例

在类上添加@Configuration注解,然后在方法上添加@Bean注解定义Bean。

@Configuration
public class AppConfig {
    @Bean
    public UserService userService() {
        return new UserService();
    }
}

4.7 @Bean

4.7.1 说明

@Bean是Spring的核心注解之一,用于定义Bean。它表示该方法返回一个Bean,可以被Spring容器管理。

4.7.2 示例

在配置类的方法上添加@Bean注解,然后在需要注入的地方使用@Autowired注解。

@Configuration
public class AppConfig {
    @Bean
    public UserService userService() {
        return new UserService();
    }
}

4.8 @RequestMapping

  • 用于映射请求URL和处理方法。它可以用于类级别和方法级别,用于指定请求URL和HTTP方法(GET、POST、PUT、DELETE等)
  • @GetMapping:用于映射HTTP GET请求
  • @PostMapping:用于映射HTTP POST请求
  • @PutMapping:用于映射HTTP PUT请求
  • @DeleteMapping:用于映射HTTP DELETE请求

4.8.1 说明

@RequestMapping是Spring MVC的核心注解之一,用于定义HTTP请求映射。它可以将HTTP请求映射到控制器类或方法上。

4.8.2 示例

  • 在控制器类或方法上添加@RequestMapping注解,然后设置相应的属性,例如:value、method、produces等。
  • @RequestMapping是一个通用注解,还有一些特定HTTP方法的注解,例如:@GetMapping、@PostMapping等。
@RestController
@RequestMapping("/users")
public class UserController {
    @GetMapping("/{id}")
    public User getUser(@PathVariable("id") Long id) {
        // ...
    }
}

4.9 @PathVariable

4.9.1 说明

@PathVariable是Spring MVC的核心注解之一,用于获取URL路径中的变量。它可以将URL路径中的变量绑定到方法参数上。

4.9.2 示例

在方法参数上添加@PathVariable注解,然后设置相应的属性,例如:value、required等。

  • 如果方法参数名称与URL路径中的变量名称相同,可以省略value属性。
  • 如果允许路径变量不存在,可以将required属性设置为false。
@RestController
@RequestMapping("/users")
public class UserController {
    @GetMapping("/{id}")
    public User getUser(@PathVariable("id") Long id) {
        // ...
    }
}

4.10 @RequestParam

4.10.1 说明

@RequestParam是Spring MVC的核心注解之一,用于获取HTTP请求参数。它可以将HTTP请求参数绑定到方法参数上。

4.10.2 示例

在方法参数上添加@RequestParam注解,然后设置相应的属性,例如:value、required、defaultValue等。

  • 如果方法参数名称与HTTP请求参数名称相同,可以省略value属性。
  • 如果允许请求参数不存在,可以将required属性设置为false。
@RestController
@RequestMapping("/users")
public class UserController {
    @GetMapping("/search")
    public List<User> searchUsers(@RequestParam("keyword") String keyword) {
        // ...
    }
}

4.11 @Value

4.11.1 说明

@Value是Spring的核心注解之一,用于获取配置文件中的属性值。它可以将配置文件中的属性值绑定到字段或方法参数上。

4.11.2 示例

在字段或方法参数上添加@Value注解,然后设置相应的属性,例如:${property.name}。

  • 如果需要使用默认值,可以在@Value注解中使用:分隔符,例如:${property.name:default}。
  • 如果需要使用占位符,可以在@Value注解中使用#{},例如:#{'Hello, ’ + property.name}。
@Component
public class AppConfig {
    @Value("${app.name}")
    private String appName;

    public String getAppName() {
        return appName;
    }
}

4.12 @RequestBody

  • 用于将HTTP请求的主体转换为方法的参数

4.12.1 说明

@RequestBody是Spring MVC框架中的一个注解,用于将HTTP请求体中的数据绑定到控制器方法的参数上。

4.12.2 示例

@RestController
@RequestMapping("/api")
public class UserController {

    @PostMapping("/users")
    public User createUser(@RequestBody User user) {
        // 创建用户
    }
}

4.13 @ResponseBody

  • 用于将方法的返回值转换为HTTP响应的主体

4.13.1

@ResponseBody是Spring MVC框架中的一个注解,用于将控制器方法的返回值转换为HTTP响应体中的数据。

4.13.2

@RestController
public class UserController {

    @GetMapping("/users/{id}")
    @ResponseBody
    public User getUser(@PathVariable int id) {
        // 从数据库或其他地方获取用户数据
        User user = userService.getUserById(id);
        return user;
    }
}

5. 前后端分离实战

  • 参考
  • 技术栈:Spring Boot + Mybatis Plus + Vue 3.x + Vite 4
    在这里插入图片描述

5.1 实战技术栈

在这里插入图片描述

  • Validation:参数校验
  • Mybatis:访问数据库
  • Redis:缓存
  • Junit:单元测试
  • Vite:View项目脚 手架
  • Router:路由
  • Pina:状态管理
  • Element-Plus:UI组件

5.2 接口描述格式

在这里插入图片描述

5.3 环境搭建

在这里插入图片描述

6. SpringDoc生成接口文档

  • 在SpringBoot中,通常使用Swagger来生成接口文档,由于Swagger需要使用Springfox,且Springfox没有升级并不支持SpringBoot3.x,所以不得不使用替代产品:Springdoc.org
  • Springdoc版本变化较快,需要根据SpringBoot版本配置对应的Springdoc版本,Springboot3.2.0需Springdoc 2.3.0
  • Springdoc同时支持WebMvc和WebFlux
  • 下面的配置使用WebMvc
  • SpringBoot3.x使用Swagger

6.1 常用注解

  • Springdoc基于swagger3注解
swagger2swagger3注解位置
@Api(tags = “接口类描述”)@Tag(tags = “接口类描述”)Controller 类上
@ApiOperation(“接口方法描述”)@Operation(summary =“接口方法描述”)Controller 方法上
@ApiImplicitParams@ParametersController 方法上
@ApiImplicitParam@Parameter(description=“参数描述”)Controller 方法上 @Parameters 里
@ApiParam(“参数描述”)@Parameter(description=“参数描述”)Controller 方法的参数上
@ApiIgnore@Parameter(hidden = true) 或 @Operation(hidden = true) 或 @Hidden
@ApiModel(description = “dto类描述”)@Schema(description = “dto类描述”)DTO类上
@ApiModelProperty(“属性描述”)@Schema(description = “属性描述”)DTO属性上

6.2 在pom.xml中增加依赖

        <dependency>
            <groupId>org.springdoc</groupId>
            <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
            <version>2.3.0</version>
        </dependency>
        <!-- 搭配校验使用,使用与SpringBoot相同的版本号 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
            <version>3.2.0</version>
        </dependency>
  • 增加依赖之后,若Maven没有及时下载依赖,则重启IDEA 2023.3

6.3 在application.properties中增加配置

############################
# 生成接口文档配置
############################
# 开启OpenApi接口
springdoc.api-docs.enabled=true
# 自定义路径,默认为:/v3/api-docs
springdoc.api-docs.path=/v3/api-docs
# 开启swagger界面,依赖OpenApi, 需要OpenApi同时开启
springdoc.swagger-ui.enabled=true
# 自定义路径,默认为:swagger-ui/index.html
# 通过url访问:http://localhost:8080/swagger-ui/index.html
springdoc.swagger-ui.path=/swagger-ui/index.html

6.4 给 Controller 加注解

主要就是下面 4 个注解:

  • @Tag 用来设置 Controller 的名称和描述,类似于给 Postman 的 Collections 命名;
  • @ApiResponses 和 @ApiResponse 用来配置响应;
  • @Operation 用来设置接口名称和描述;
  • @Parameter 用来设置请求参数的描述、是否必填和示例。
@RestController

// 响应的 MediaType 都是 application/json
@RequestMapping(path = "/process-definition", produces = "application/json")

// Tag 注解, 给整个接口起了个名字 "流程定义", 描述是 "流程定义 API"
@Tag(name = "流程定义", description = "流程定义 API")

// ApiResponses 给每个接口提供一个默认的响应, 状态码是 200, 描述是 "接口请求成功"
@ApiResponses(@ApiResponse(responseCode = "200", description = "接口请求成功"))

public class ProcessDefinitionController {

    // Operation 注解设置了接口名称, 接口描述
    @Operation(summary = "上传 BPMN xml 字符串 并部署", description = "此接口处理的是 xml 字符串")
    @PostMapping("/upload-and-deploy/bpmn-xml-str")
    public JsonResult<?> uploadAndDeployBpmnXmlStr(@RequestBody BpmnXmlReq req) {
        return JsonResult.of(CommonCodeEnum.OK);
    }

    @Operation(summary = "查询单个 bpmn xml 数据")
    @GetMapping("/bpmn-xml")
    public JsonResult<BpmnXmlResp> findBpmnXml(
            // Parameter 注解设置了请求参数的描述, 是否必填 以及示例
            @Parameter(description = "流程部署ID", required = true, example = "1234") String deployId,
            @Parameter(description = "流程资源名称", required = true, example = "xxx.bpmn") String resourceName) {
        return JsonResult.of(CommonCodeEnum.OK, new BpmnXmlResp());
    }
}

6.5 给 Model 加注解

  • @Schema: Swagger文档的注解,用于说明类/字段
    • title: 类/字段说明
    • example: 示例,Swagger中会将这个字段作为示例
    • minLength/maxLength: 最小/最大长度,字段为String类型时生效(仅用于文档说明,不会抛出异常)
    • minimum/maximum: 最小/最大值,字段为数字时有效(仅用于文档说明,不会抛出异常)
  • @NotBlank: 校验不能为空(String生效),为空或空字符则抛出异常。文档将该字段解析为必填项
  • @NotNull: 校验不能为空(包装类生效,如Integer/Long/Boolean),为空将抛出异常。文档将该字段解析为必填项
  • @Range: 检查数值范围,不符合将抛出异常
@Data
@ToString
@Schema(title = "用户模型")
public class User {
    @Schema(title = "用户ID,由系统分配")
    private Integer id;

    @Schema(title = "用户名", example = "罗杰", minLength = 1, maxLength = 32)
    @NotBlank(message = "用户名不能为空")
    private String userName;

    @Schema(title = "地址", example = "深圳市南山区关口二路", minLength = 1, maxLength = 128)
    @NotBlank(message = "姓名不能为空")
    private String address;

    @Schema(title = "年龄", example = "18", minimum = "0", maximum = "150")
    @NotNull(message = "年龄不能为空")
    @Range(min = 0, max = 150, message = "年龄在0~150之间")
    private Integer age;

    @Schema(title = "电话号码(可选)", example = "13866668888")
    private String phone;

    public User(Integer id, String userName, String address) {
        this.id = id;
        this.userName = userName;
        this.address = address;
    }
}

7. AOP

  • 跟踪接口被访问的次数

8. Spring Boot 3 集成数据库MySql

8.1 SQL数据类型

在这里插入图片描述

在这里插入图片描述

  • 数值类型
    在这里插入图片描述
  • 字符串
    在这里插入图片描述
  • 日期类型
    在这里插入图片描述

8.2 MySQL常用命令

#启动
net start mysql80

# 停止 
net stop mysql80

# 客户端连接
mysql [-h 127.0.0.1] [-P 3306] -u root -p

# 创建数据库
create database health default charset utf8mb4;

# 查看所有数据库
show databases;

 #使用数据库
use health;

# 查看当当使用的数据库
select database();

# 查发前数据库所有表
show tables;

# 查询表结构
desc 表名

# 查询指定表的建表语句
show create table 表名

# 创建表
create table 表名(
  字段1   字段1类型 [comment 字段1注释],
  字段2   字段2类型 [comment 字段2注释],
  字段3   字段3类型 [comment 字段3注释],
  ...
  字段n   字段n类型 [comment 字段4注释]
)  [comment 注释]# 示例 
create table user(
  id    int          comment '用户ID',
  name   varchar(32) comment '姓名',
  age    int         comment '年龄',
  gender varchar(1)  comment '性别'
) comment '用户表';

create table user_basic (
  id        int comment '用户唯一ID',
  name      varchar(20) comment '姓名',
  gender    char(1) comment '性别',
  birthday  date comment '出生日期',
  id_card   char(32) comment '身份证号',
  face_file varchar(64) comment '人脸图片文件名'	
) comment '用户基本信息';

insert into user_basic values (1, '张三', '男', '2000-12-18', '440301200012181233', '1.jpg');
insert into user_basic values (1, '李四', '女', '2001-12-18', '440301200112181223', '2.jpg');


# 表增加字段
alter table 表名 add 字段名 字段类型 [comment 字段3注释];

# 修改数据类型
alter table 表名 modify 字段名 新数据类型;

# 修改字段名和字段类型
alter table 表名 change 旧字段名 新字段名  类型 commnet '';

# 删除字段
alter table 表名 drop 字段名;

# 修改表名
alter table 表名 rename to 新表名;

# 删除表
drop table if exists 表名;

# 删除指定表,并重新创建此表
truncate table 表名;

# 插入数据时,字符串和日期型数据应该包含在引号中。
# 给部分字段添加数据
insert into 表名(字段名1, 字段名m, ...) values (值1, 值m, ...);

# 给所有字段添加数据
insert into 表名 values (值1, 值2, ...);

# 批量添加数据
insert into 表名(字段名1, 字段名m, ...) values (值1, 值m, ...), (值1, 值m, ...);
insert into 表名 values (值1, 值2, ...),  (值1, 值2, ...);

# 修改数据
update 表名 set 字段名1=值1, 字段名2=值2,... [where 条件]

# 删除数据
delete from 表名 [where 条件]
# 查询
select 字段列表 from 表名列表 where 条件列表 group by 分组字段列表 having 分组后条件列表 order by 排序字段列表 limit 分页参数

# 查询多 个字段
select * from 表名;
select 字段1, 字段2, ...  from 表名;

# 去除重复记录
select distinct 字段列表 from  表名;


# 条件查询 (where)

# 聚合函数 (count, max, min, avg, sum)

# 分组查询 (group by)

# 排序查询 (order by)

# 分页查询 (limit)



8.3 SpringBoot 3.x 支持的数据库连接池

8.4 集成方案 (Druid + Mybatis Plus +Druid+ Mysql集成方案)

8.4.1 SpringBoot 3.2.0 + Druid + MySQL

# 配置数据源 (数据库health)
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/health?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

# 连接池配置
# 初始化时建立物理连接的个数
spring.datasource.druid.initial-size=5
# 连接池最大连接数量
spring.datasource.druid.max-active=20
# 连接池的最小空闲数量
spring.datasource.druid.min-idle=5
# 获取连接时最大等待时间,单位毫秒
spring.datasource.druid.max-wait=60000
# 是否缓存preparedStatement, 也就是PSCache,PSCache对支持游标的数据库性能提升巨大,比如说oracle,在mysql下建议关闭
spring.datasource.druid.pool-prepared-statements=false
# 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。
# 在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100
spring.datasource.druid.max-pool-prepared-statement-per-connection-size=-1
#spring.datasource.druid.max-open-prepared-statements= #和上面的等价
# 用来检测数据库连接是否有效的sql 必须是一个查询语句(oracle中为 select 1 from dual)
spring.datasource.druid.validation-query=select 'x'
#spring.datasource.druid.validation-query-timeout=
# 申请连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
spring.datasource.druid.test-on-borrow=false
# 归还连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
spring.datasource.druid.test-on-return=false
# 申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效
spring.datasource.druid.test-while-idle=true
# 既作为检测的间隔时间又作为testWhileIdel执行的依据
spring.datasource.druid.time-between-eviction-runs-millis=60000
# 销毁线程时检测当前连接的最后活动时间和当前时间差大于该值时,关闭当前连接(配置连接在池中的最小生存时间)
spring.datasource.druid.min-evictable-idle-time-millis=30000
spring.datasource.druid.max-evictable-idle-time-millis=80000
# 置监控统计拦截的filters,去掉后监控界面sql无法统计,stat: 监控统计、Slf4j:日志记录、waLL: 防御sqL注入
spring.datasource.druid.filters= stat, wall, slf4j

## 监控配置
# WebStatFilter配置,说明请参考Druid Wiki,配置_配置WebStatFilter
# 是否启用StatFilter默认值true
spring.datasource.druid.web-stat-filter.enabled=true
# 添加过滤规则
spring.datasource.druid.web-stat-filter.url-pattern=/*
# 忽略过滤的格式
spring.datasource.druid.web-stat-filter.exclusions=/druid/*,*.js,*.gif,*.jpg,*.png,*.css,*.ico
#spring.datasource.druid.web-stat-filter.session-stat-enable=
#spring.datasource.druid.web-stat-filter.session-stat-max-count=
#spring.datasource.druid.web-stat-filter.principal-session-name=
#spring.datasource.druid.web-stat-filter.principal-cookie-name=
#spring.datasource.druid.web-stat-filter.profile-enable=

# StatViewServlet配置,说明请参考Druid Wiki,配置_StatViewServlet配置
# 是否启用StatViewServlet默认值true
spring.datasource.druid.stat-view-servlet.enabled=true
# 访问路径为/druid时,跳转到StatViewServlet
spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
# 是否能够重置数据
spring.datasource.druid.stat-view-servlet.reset-enable=false
# 需要账号密码才能访问控制台,默认为root
spring.datasource.druid.stat-view-servlet.login-username=admin
spring.datasource.druid.stat-view-servlet.login-password=123456
# IP白名单
spring.datasource.druid.stat-view-servlet.allow=127.0.0.1
# IP黑名单(共同存在时,deny优先于allow)
spring.datasource.druid.stat-view-servlet.deny=

# Spring监控配置,说明请参考Druid Github Wiki,配置_Druid和Spring关联监控配置
#spring.datasource.druid.aop-patterns= # Spring监控AOP切入点,如x.y.z.service.*,配置多个英文逗号分隔

  • 依赖文件 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.2.0</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.kscx</groupId>
    <artifactId>MyDB</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>MyDB</name>
    <description>MyDB</description>
    <properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--<dependency>-->
        <!--    <groupId>org.mybatis.spring.boot</groupId>-->
        <!--    <artifactId>mybatis-spring-boot-starter</artifactId>-->
        <!--    <version>3.0.3</version>-->
        <!--</dependency>-->

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-3-starter</artifactId>
            <version>1.2.20</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter-test</artifactId>
            <version>3.0.3</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

  • 特别注意Druid的依赖如下,否则因为版本不兼容,无法正常工作
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-3-starter</artifactId>
            <version>1.2.20</version>
        </dependency>

8.4.2 SpringBoot 3.2.0 +MyBatis-Plus+ Druid + MySQL

8.4.2.1 代码生成器(MyBatis-Plus)
  • AutoGenerator是MyBatis-Plus的代码生成器,通过AutoGenerator可以快速生成Entity、Mapper、Mapper XML、Service、Controller等各个模块的代码,极大的提升了开发效率。
8.4.2.2 环境配置(MyBatis-Plus)
  • pom.xml 需要增加以下内容
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>3.0.3</version>
        </dependency>

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.4.1</version>
        </dependency>
  • application.properties没有变化
8.4.2.3 实现代码(MyBatis-Plus)
  • 第一步:启动类中添加 @MapperScan 注解,以扫描 mapper 文件夹
@SpringBootApplication
@MapperScan(basePackages = "com.kk.test.mapper")  // 启动类中添加 @MapperScan 注解,以扫描 mapper 文件夹
public class SpringBootMybatisplusDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootMybatisplusDemoApplication.class, args);
    }
}
  • 第二步:新建表对应的实体类User,数据类型和名称要与数据库表中的一致
@Data
//表名与实体类名称不一致需要手动指定表名
@TableName("tb_user")
public class User implements Serializable {
    private Integer id;
    private String name;
    private Integer sex;
    private Integer age;
    private String grade;
}

  • 第三步:创建访问实体类User的Mapper接口, 建在mapper目录下
public interface UserMapper extends BaseMapper<User> {
}
  • 第四步:调用接口UserMapper访问数据据
@SpringBootTest
class SpringBootMybatisplusDemoApplicationTests {
    @Autowired
    private UserMapper  userMapper;
    @Test
    public void testSelectList() {
        System.out.println(("----- selectAll method test ------"));
        List<User> userList = userMapper.selectList(null);
        userList.forEach(System.out::println);
    }
}
8.4.2.4 MyBatis-Plus注解及使用指南

8.5 整合mybatis

在这里插入图片描述

9. Vue3(开发用户界面)

9.1 前后端分离开发模式

  • 前端:只负责UI
  • 后端:只负责提供JSON格式的数据
    在这里插入图片描述

9.2 Vue简介

  • Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。无论是简单还是复杂的界面,Vue 都可以胜任。

9.3 安装配置环境

  • 安装环境
npm install -g create-vue
  • 创建项目
create-vue
  • 16
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值