Sprint Boot 3.2.0
- 1. 简介
- 2. 搭建开发环境(Win11)
- 3. 常用知识点
- 4. SpringBoot的常用注解
- 5. 前后端分离实战
- 6. SpringDoc生成接口文档
- 7. AOP
- 8. Spring Boot 3 集成数据库MySql
- 9. Vue3(开发用户界面)
1. 简介
-
Bean:在Spring Boot中,Bean是一个被Spring容器管理的Java对象。 当Spring容器启动时,它会读取应用程序的配置文件(如application.properties或application.yml)并创建所有的Bean。 开发者可以在配置文件中定义Bean,也可以使用注解的方式定义Bean。
-
ioc容器:ioc容器是指由spring来负责控制对象的生命周期和对象间的关系。 ioc容器全称Inversion of Control
-
特点:
- 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 开发环境
软件 | 版本 |
---|---|
JDK | 17.0.2 2022-01-18 LTS |
Maven | 3.9.6 |
IDEA | 2023.3 |
SpringBoot | 3.2.0 |
druid-spring-boot-3-starter | 1.2.20 |
MySQL Community Server | 8.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接口。
- 是一种JAVA语言写成的可重用组件。JavaBean符合一定规范编写的Java类,不是一种技术,而是一种规范。大家针对这种规范,总结了很多开发技巧、工具函数。符合这种规范的类,可以被其它的程序员或者框架使用。它的方法命名,构造及行为必须符合特定的约定:
- 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一个窗口打开多个项目
-
IDEA和Eclipse中概念对比
-
在一个project中导入多个module
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的常用注解
- 在SpringBoot中,注解是一种非常重要的编程方式,它可以简化代码,提高开发效率。
- SpringBoot最常用的50个注解
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注解
swagger2 | swagger3 | 注解位置 |
---|---|---|
@Api(tags = “接口类描述”) | @Tag(tags = “接口类描述”) | Controller 类上 |
@ApiOperation(“接口方法描述”) | @Operation(summary =“接口方法描述”) | Controller 方法上 |
@ApiImplicitParams | @Parameters | Controller 方法上 |
@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集成方案)
- 方案一:Hikari + jdbc + mysql 集成方案
- 方案二:Druid + Mybatis Plus + Mysql集成方案
- Spring Boot 3 集成mybatis-plus+druid+mysql
8.4.1 SpringBoot 3.2.0 + Druid + MySQL
- Druid配置
- 因为Druid有场景启动器,所以代码上不需要做任何修改,只需要配置application.properties文件即可
- 配置好之后,通过http://localhost:8080/druid/index.html即可访问Druid监控器
- Druid可配置的参数参见
# 配置数据源 (数据库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