【SpringBoot】之Mybatis=Plus集成及使用(入门级)

 🎉🎉欢迎来到我的CSDN主页!🎉🎉

🏅我是君易--鑨,一个在CSDN分享笔记的博主。📚📚

🌟推荐给大家我的博客专栏《SpringBoot开发之Mybatis-Plus系列》。🎯🎯

🎁如果感觉还不错的话请给我关注加三连吧!🎁🎁


 前言

        在之前的几期有关SpringBoot开发系列的博客的分享中,我们学到了SpringBoot的一些基础使用、Freemarker的集成使用以及自定义Starter的集成及运用。今天我给各位老铁带来的是与数据库相关的知识分享,也是集成到我们的SpringBoot之中方便我们后续的开发。

一、Mybatis-Plus简介

1. 概述(基本概念)

        MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。它提供了一些常用功能的增强,使得开发者可以更加便捷地进行数据库访问操作。

        虽然MyBatis-Plus有许多优点,但它也可能存在不足之处。因此,在使用时需要根据项目需求和个人喜好进行选择。

        官网:MyBatis-Plus (baomidou.com)

2. 主要特性与功能

        以下是Mybatis-Plus的一些主要特性及功能:

Mybatis-Plus的主要特性及功能
主要特性及功能说明
简化 CRUD 操作MyBatis-Plus 提供了一套简单而强大的 CRUD 操作方法,通过继承 接口,可以直接使用它提供的方法,无需手写 SQL 语句,减少了重复的代码。
条件构造器MyBatis-Plus 提供了灵活的条件构造器,可以方便地拼接查询条件,支持链式调用,使得动态 SQL 的构建更加简便。
分页插件MyBatis-Plus 集成了分页插件,可以方便地进行分页查询。
主键生成策略MyBatis-Plus 支持多种主键生成策略,包括雪花算法、UUID、自增等,可以根据需求灵活配置。
自动填充MyBatis-Plus 支持自动填充功能,可以在插入或更新数据时自动填充指定字段的值。

3. 特点

MyBatis-Plus的特点包括:

  1. 无侵入:它在MyBatis的基础上进行增强,没有改变MyBatis的原有架构,因此引入MyBatis-Plus不会对现有的MyBatis构架产生任何影响。
  2. 依赖少:使用起来相对方便、快捷。
  3. 集MyBatis与Hibernate的优点于一身。

4. 结构

图示

        MyBatis-Plus 的结构组成主要包括核心模块、插件模块以及代码生成器。下面是对这些组成部分的简要描述:

  1. 核心模块(Core Module):

    • BaseMapper 接口: 定义了常用的 CRUD 操作,如 、、、 等,开发者可以通过继承该接口来获得这些基本的数据库操作方法,无需手动编写 SQL 语句。insertupdatedeleteselect
    • Wrapper 类: 提供了条件构造器,用于灵活地拼接查询条件,支持链式调用,使得动态 SQL 的构建更加方便。
  2. 插件模块(Plugin Module):

    • 分页插件: 集成了分页插件,使得在进行分页查询时更加便捷。
    • 逻辑删除插件: 支持逻辑删除的功能,通过注解和配置实现逻辑删除。
    • 性能分析插件: 提供了性能分析的功能,可以输出 SQL 的执行时间等信息,方便开发者进行性能优化。
    • 动态表名插件: 允许在运行时动态指定表名,适用于一些需要动态切换表的场景。
  3. 代码生成器(Code Generator):

    • MyBatis-Plus 提供了一个代码生成器工具,可以根据数据库表自动生成对应的 Entity、Mapper 接口以及 Service 类,减少了开发者的重复劳动,提高了开发效率。
    • 通过配置代码生成器,可以灵活地指定生成的代码结构和规范。
  4. 注解(Annotation):

    • MyBatis-Plus 使用了一系列注解来辅助开发,如 用于指定数据库表名, 用于指定主键, 用于指定数据库字段与实体类属性的映射关系, 用于指定逻辑删除字段等。@TableName@TableId@TableField@TableLogic
  5. 配置项(Configuration):

    • MyBatis-Plus 支持丰富的配置选项,通过配置文件或者注解,可以对其行为进行定制,包括主键策略、逻辑删除配置、自动填充配置等。

5. 数据库

        MyBatis-Plus 作为 MyBatis 的增强工具库,对数据库的使用没有特殊的要求。它与 MyBatis 一样,可以与各种支持 JDBC 的关系型数据库集成,包括但不限于 MySQL、Oracle、SQL Server、PostgreSQL 等。

        但Mybatis-Plus在使用上数据库中还是有一些注意事项和要求:

Mybatis-Plus在数据库中使用注意事项
注意点事项说明
数据库兼容性MyBatis-Plus 可以与多种数据库进行兼容,但需要注意数据库驱动和版本的选择。通常,你需要根据你所使用的数据库,选择相应的 JDBC 驱动,并确保驱动的版本和 MyBatis-Plus 版本兼容。
主键策略MyBatis-Plus 提供了多种主键生成策略,包括雪花算法、UUID、自增等。在使用时,需要根据数据库支持的主键生成方式进行配置,以确保生成的主键能够被数据库正确识别和处理。
数据库连接配置和 MyBatis 一样,MyBatis-Plus 使用数据源来管理数据库连接。你需要配置数据源的相关信息,包括数据库 URL、用户名、密码等。数据源的配置通常在项目的配置文件中进行。
表和实体类映射MyBatis-Plus 通过注解 来指定实体类对应的数据库表名,而通过 注解来指定数据库字段与实体类属性的映射关系。确保实体类和数据库表之间的映射关系正确,以避免出现数据操作的错误。@TableName@TableField

         总的来说,MyBatis-Plus 并没有对数据库的使用提出过多的特殊要求。你可以根据自己项目的实际情况选择合适的数据库,并按照 MyBatis 和 MyBatis-Plus 的配置规范进行配置,就能够顺利地进行数据库操作。

二、SpringBoot集成Mybatis-Plus

1. pom依赖导入

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><groupId>com.yx</groupId><artifactId>Mybatis-Plus</artifactId><version>0.0.1-SNAPSHOT</version><name>Mybatis-Plus</name><description>Mybatis-Plus</description><properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>2.7.6</spring-boot.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId></dependency>
<!--        导入Mybatis-Plus依赖--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.2</version></dependency>
<!--     导入mybatis-plus生成器的依赖   --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.5.2</version></dependency>
<!--        数据库依赖--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot.version}</version><configuration><mainClass>com.yx.mybatisplus.MybatisPlusApplication</mainClass><skip>true</skip></configuration><executions><execution><id>repackage</id><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build></project>

2. yml文件配置

application.yml

spring:
#  数据库连接datasource:driver-class-name: com.mysql.jdbc.Driverusername: rootpassword: 123456url: jdcb:mysql://localhost:3306/bookshop
mybatis-plus:
#  类别名type-aliases-package: com.yx.mybatisplus.pojoconfiguration:
#      是否启用驼峰命名map-underscore-to-camel-case: true
logging:level:com.yx.mybatisplus.mapper: debug

3. 生成Mybatis生成类

        我们可以官网上去查找到生成器,但是官网的生成器并不是最完整的,因此我在下面放了我自己整合的生成器,较为完整。生成器的一些配置需要根据自身的项目信息就行修改。

 MySQLGenerator.java

package com.yx.mybatisplus.config;import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import lombok.extern.slf4j.Slf4j;import java.util.Arrays;
import java.util.Collections;
import java.util.List;@Slf4j
public class MySQLGenerator {private final static String URL = "jdbc:mysql://localhost:3306/bookshop";private final static String USERNAME = "root";private final static String PASSWORD = "123456";private final static DataSourceConfig.Builder DATA_SOURCE_CONFIG =new DataSourceConfig.Builder(URL, USERNAME, PASSWORD);public static void main(String[] args) {FastAutoGenerator.create(DATA_SOURCE_CONFIG).globalConfig((scanner, builder) ->builder.author(scanner.apply("请输入作者名称?")).outputDir(System.getProperty("user.dir") + "\\src\\main\\java").commentDate("yyyy-MM-dd").dateType(DateType.TIME_PACK)).packageConfig((builder) ->builder.parent("com.yx.mybatisplus").entity("pojo").service("service").serviceImpl("service.impl").mapper("mapper").xml("mapper.xml").pathInfo(Collections.singletonMap(OutputFile.xml, System.getProperty("user.dir") + "\\src\\main\\resources\\mapper"))).injectionConfig((builder) ->builder.beforeOutputFile((a, b) -> log.warn("tableInfo: " + a.getEntityName()))).strategyConfig((scanner, builder) ->builder.addInclude(getTables(scanner.apply("请输入表名,多个英文逗号分隔?所有输入 all"))).addTablePrefix("tb_", "t_", "lay_", "meeting_", "sys_").entityBuilder().enableChainModel().enableLombok().enableTableFieldAnnotation().controllerBuilder().enableRestStyle().enableHyphenStyle().build()).templateEngine(new FreemarkerTemplateEngine()).execute();}protected static List<String> getTables(String tables) {return "all".equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(","));}}

4. 生成代码

        当我们对其配置根据我们的项目信息就行了修改之后,我们就可以运行生成器类进行生成代码。 

 

         由下面动图可以得知BookMapper.xml、BookMapper、Service层和Controller层都没有代码,其中BookMapper.xml、BookMapper、Service层都是Mybatis-Plus自带了方法代码,其中只要我们在Controller层编写请求代码即可。我们要记得在一些类上打上注解。

         注意事项:在启动类上记得添加mapper扫描类注解

5. 初步测试

        我们在controller层编写一个查询的请求,在网页进行访问查看是否显示数据。

         我们在网页访问查看方法的请求路径即可

 

三、延伸

1. 第三方测试工具使用

        在我们的一些请求方法中它发送的有时不一定是post请求,有get、del、put等等请求类型,因此我们要借助第三方工具进行测试,因为子啊网页测试路径不会显示。推荐使用Apifox

官网:

        可以使用网页版也可以使用应用版

Apifox - API 文档、调试、Mock、测试一体化协作平台。拥有接口文档管理、接口调试、Mock、自动化测试等功能,接口开发、测试、联调效率,提升 10 倍。最好用的接口文档管理工具,接口自动化测试工具。

         我们接下来编写一个新增的请求,使用第三方工具进行测试

        对应的数据我们可以去数据库进行查看 

2.  主键生成策略

2.1 介绍

        主键生成策略是关系型数据库中用于生成主键值的一种机制。每个数据库表都需要一个主键,它唯一标识表中的每一行数据。当你向表中插入新记录时,需要为主键字段生成一个唯一的值。

常见的主键策略包括以下:

  1. 自增(Auto-increment): 数据库系统会自动为主键字段分配一个唯一的递增值。在MySQL中,通常使用关键字来定义自增主键。AUTO_INCREMENT

  2. 序列(Sequence): 一些数据库系统提供了序列对象,允许你预先定义一组唯一的数字,并在插入记录时使用这些数字。在Oracle数据库中,通常使用序列生成主键值。

  3. UUID(Universally Unique Identifier): 使用UUID算法生成全局唯一的标识符。UUID主键不依赖于数据库的实现,通常以字符串形式存储。

  4. 雪花算法(Snowflake): 通过使用分布式ID生成算法,生成具有一定唯一性和有序性的主键。这对于分布式系统中生成唯一标识符很有用。

实例:

2.2 注解介绍

        @TableId主键注解,放置于实体类中的主键字段上。

 

  • @TableId注解属性

属性类型必须指定默认值描述
valueString""主键字段名
typeEnumIdType.NONE指定主键类型

@TableId注解type属性IdType主键生成策略介绍:

描述
AUTO数据库 ID 自增
NONE无状态,该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)
INPUTinsert 前自行 set 主键值
ASSIGN_ID分配 ID(主键类型为 Number(Long 和 Integer)或 String)(since 3.3.0),使用接口IdentifierGenerator的方法nextId(默认实现类为DefaultIdentifierGenerator雪花算法)
ASSIGN_UUID分配 UUID,主键类型为 String(since 3.3.0),使用接口IdentifierGenerator的方法nextUUID(默认 default 方法)

         其中如果使用的是AUTO属性时,当你在新增数据时携带了id属性及值,他将不会自增,而是将id赋予你输入的值

雪花算法自动生成

         我们有时会使用id随机生成,这时我们就会使用雪花id,因为自带的可能效果不是很好,因此推荐使用网上的。下面是我推荐的一个雪花id。

网址:多语言新雪花算法(SnowFlake IdGenerator): 💎迄今为止最全面的分布式主键ID生成器。 💎优化的雪花算法(SnowFlake)——雪花漂移算法,在缩短ID长度的同时,具备极高瞬时并发处理能力(50W/0.1s)。 💎原生支持 C#/Java/Go/Rust/C/SQL 等多语言,且提供 PHP 扩展及 Python、Node.js、Ruby 多线程安全调用动态库(FFI)。💎支持容器环境自动扩容(自动注册 WorkerId ),单机或分布式唯一IdGenerator。 (gitee.com)

         引入依赖,修改数据类型为bigint,实体对象的id类型改为Long。

 

        最后我们进行测试 

 2.3 自动填充

@TableField字段注解(非主键),其中fill字段自动填充策略,具体策略如下:

描述
DEFAULT默认不处理
INSERT插入时填充字段
UPDATE更新时填充字段
INSERT_UPDATE插入和更新时填充字段

        注解则是指定该属性在对应情况下必有值,如果无值则入库会是null

        自动填充需要借助自定义实现类完成

MyMetaObjectHandler.java

@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {@Overridepublic void insertFill(MetaObject metaObject) {log.info("开始新增操作自动填充 ....");this.strictInsertFill(metaObject, "createdate", LocalDateTime.class, LocalDateTime.now());}@Overridepublic void updateFill(MetaObject metaObject) {log.info("开始更新操作自动填充 ....");this.strictUpdateFill(metaObject, "createdate", LocalDateTime.class, LocalDateTime.now());}
}
使用情景

情况一:fill = FieldFill.DEFAULT,无论是新增和更新都不进行自动填充;

情况二:fill = FieldFill.INSERT,执行新增操作自动填充数据;

情况三:fill = FieldFill.UPDATE,执行更新操作,若字段不为空则自动填充数据;再次执行更新操作不会刷新数据

案例演示:

        首先在自定义实现类中指定指定的字段,在不同的情况下填充指定内容

        编写对应的请求方法 

 实体对象的指定字段标记使用实现类

测试结果 

新增

修改 


🎉🎉本期的博客分享到此结束🎉🎉

📚📚各位老铁慢慢消化📚📚

🎯🎯下期博客博主会带来新货🎯🎯

🎁三连加关注,阅读不迷路 !🎁

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/218454.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WPF仿网易云搭建笔记(2):组件化开发

文章目录 前言专栏和Gitee仓库依赖属性实战&#xff1a;缩小&#xff0c;全屏&#xff0c;关闭按钮依赖属性操作封装主窗口传递this本身给TitleView标题控件主要代码MainWindow.xmalMainWindow.cs依赖属性方法封装TitleView.csTitleViewModelTitleViewModel实现效果 前言 这次…

有什么好用的资产设备管理系统?工单管理系统在设备管理上有什么作用?

设备管理对于企业而言是非常重要的&#xff0c;像互联网企业、医院、化工企业、制造企业等&#xff0c;都需要用到贵重设备或者仪器。这些设备仪器不仅本身造价成本高&#xff0c;还和生产活动息息相关&#xff0c;所以必须做好日常的维护管理才能确保企业生产活动正常进行。而…

计算机网络:物理层(三种数据交换方式)

今天又学到一个知识&#xff0c;加油&#xff01; 目录 前言 一、电路交换 二、报文交换 三、分组交换 1、数据报方式 2、虚电路方式 3、比较 总结 前言 为什么要进行数据交换&#xff1f; 一、电路交换 电路交换原理&#xff1a;在数据传输期间&#xff0c;源结点与…

新手HTML和CSS的常见知识点

​​​​ 目录 1.HTML标题标签&#xff08;到&#xff09;用于定义网页中的标题&#xff0c;并按照重要性递减排列。例如&#xff1a; 2.HTML段落标签&#xff08;&#xff09;用于定义网页中的段落。例如&#xff1a; 3.HTML链接标签&#xff08;&#xff09;用于创建链接…

【网络编程之初出茅庐】

前言&#xff1a;本章主要先讲解一些基本的网络知识&#xff0c;先把基本的知识用起来&#xff0c;后续会更深入的讲解底层原理。 网络编程的概念 网络编程&#xff0c;指网络上的主机&#xff0c;通过不同的进程&#xff0c;以编程的方式实现网络通信&#xff08;或称为网络数…

深度学习 Day16——P5运动鞋识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 文章目录 前言1 我的环境2 代码实现与执行结果2.1 前期准备2.1.1 引入库2.1.2 设置GPU&#xff08;如果设备上支持GPU就使用GPU,否则使用C…

【数据结构第 6 章 ④】- 用 C 语言实现图的深度优先搜索遍历和广度优先搜索遍历

目录 一、深度优先搜索 1.1 - 深度优先搜索遍历的过程 1.2 - 深度优先搜索遍历的算法实现 二、广度优先搜索 2.1 - 广度优先搜索遍历的过程 2.2 - 广度优先搜索遍历的算法实现 和树的遍历类似&#xff0c;图的遍历也是从图中某一顶点出发&#xff0c;按照某种方法对图中所…

VUE-脚手架搭建

文章目录 一、概述二、前提准备1. 安装 node-js2. npm 镜像设置3. 安装 vs-code 三、脚手架搭建1. Vue-2 搭建1. Vue-3 搭建 一、概述 官网&#xff1a;http://cn.vuejs.org/ vue 有两个大版本&#xff0c;分别是 vue-2 和 vue-3&#xff0c;目前新项目的话用 vue-3 的会比较多…

Jmeter,提取响应体中的数据:正则表达式、Json提取器

一、正则表达式 1、线程组--创建线程组&#xff1b; 2、线程组--添加--取样器--HTTP请求&#xff1b; 3、Http请求--添加--后置处理器--正则表达式提取器&#xff1b; 4、线程组--添加--监听器--查看结果树&#xff1b; 5、线程组--添加--取样器--调试取样器。 响应体数据…

正则表达式详解

什么是正则表达式 正则表达式&#xff0c;又称规则表达式&#xff0c;通常被用来检索、替换那些符合某个模式(规则)的文本。 正则表达式是对字符串操作的一种逻辑公式&#xff0c;就是用事先定义好的一些特定字符、及这些特定字符的组合&#xff0c;组成一个"规则字符串…

Docker-consule 服务发现与注册

consul服务更新和服务发现 什么是服务注册与发现 服务注册与发现是微服务架构中不可或缺的重要组件。起初服务都是单节点的&#xff0c;不保障高可用性&#xff0c;也不考虑服务的压力承载&#xff0c;服务之间调用单纯的通过接口访问。直到后来出现了多个节点的分布式架构&…

Redis新数据类型-Bitmaps

目录 Bitmaps 简介 命令 1. setbit (1) 格式 (2) 实例 2. getbit (1) 格式 (2) 实例 3. bitcount (1) 格式 (2) 实例 4. bitop (1) 格式 (2) 实例 我的其他博客 Bitmaps 简介 Bitmaps 是 Redis 的一种新数据类型&#xff0c;它是一种用于存储位信息的数据结构&…

Dockerfile创建镜像--LNMP+wordpress

实验准备&#xff1a; nginx&#xff1a;172.111.0.10 docker-nginx mysql&#xff1a;172.111.0.20 docker-mysql php&#xff1a;172.111.0.30 docker-php 自定义网段&#xff1a;172.111.0.0/16mkdir nginx mysql php mv nginx-1.22.0.tar.gz wordpress-6.4.2-zh_CN.ta…

用postman进行web端自动化测试

前言 概括说一下&#xff0c;web接口自动化测试就是模拟人的操作来进行功能自动化&#xff0c;主要用来跑通业务流程。 主要有两种请求方式&#xff1a;post和get&#xff0c;get请求一般用来查看网页信息&#xff1b;post请求一般用来更改请求参数&#xff0c;查看结果是否正…

网络服务IP属地发生变化的原因有哪些?

近期&#xff0c;许多用户发现自己的网络服务IP属地发生了变化。原本固定的IP地址不再是静态的&#xff0c;而是发生了变动。这一现象引起了广大用户的关注和疑惑&#xff0c;对网络服务的使用和信息安全产生了影响。为了解决用户的疑虑&#xff0c;我们对此现象进行了深入探究…

2023.12.15 FineBI与kettle

1.结构化就是可以用schema描述的数据,就是结构化数据,能转为二维表格, 如CSV,Excel, 2.半结构化就是部分可以转换为二维表格,如JSON,XML 3.非结构化数据,就是完全无法用二维表格表示的数据,如Word文档,Mp4,图片,等文件. kettle的流程 新建转换-构建流图-配置组件-保存运行 使…

20.Java程序设计-基于SSM框架的安卓掌上校园生活系统的设计与实现

摘要&#xff1a; 随着移动互联网技术的快速发展&#xff0c;校园生活信息化成为提高学校管理效率、方便学生生活的关键。本研究以基于SSM&#xff08;Spring Spring MVC MyBatis&#xff09;框架的技术体系为基础&#xff0c;致力于设计与实现一款功能强大、高效稳定的安卓…

【EventBus】EventBus源码浅析

二、EventBus源码解析 目录 1、EventBus的构造方法2、订阅者注册 2.1 订阅者方法的查找过程2.2 订阅者的注册过程1. subscriptionsByEventType 映射&#xff1a;2. typesBySubscriber 映射&#xff1a;2.3 总结订阅者的注册过程 3、事件的发送 3.1 使用Post提交事件3.2 使用p…

飞天使-docker知识点8-docker的资源限制

文章目录 容器资源限制示例 容器资源限制 Docker提供了多种资源限制的方式&#xff0c;可以根据应用程序的需求和系统资源的可用性进行选择。以下是一些常见的Docker资源限制及其使用情况&#xff1a;CPU限制&#xff1a;通过设置CPU的配额&#xff08;quota&#xff09;和周期…

【Redis】深入理解 Redis 常用数据类型源码及底层实现(1.结构与源码概述)

在文章【Redis】不卡壳的 Redis 学习之路&#xff1a;从十大数据类型开始入手中我们介绍了Redis常用的10大数据类型&#xff0c;这10大数据类型可并不是直接在底层通过代码实现的&#xff0c;而是通过不同的底层数据结构组合起来的&#xff0c;这篇我们介绍下Redis常用数据类型…