【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.mzph.cn/news/225719.shtml

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

相关文章

MySQL数据存储、索引记录

行格式(每行记录) 行格式(每行记录)&#xff1a; 以记录为单位来向表中插入数据的&#xff0c;这些记录在磁盘上的存放方式也被称为 行格式 或者 记录格式。 InnoDB 存储引擎4种不同类型的 行格式 &#xff0c;分别是 Compact 、 Redundant 、Dynamic 和 Compressed 行格式。组…

git 的使用

git reset详解-CSDN博客 git reset 命令详解 git revert命令详解。-CSDN博客 关于Git分支中HEAD和Master的理解 - 知乎 (zhihu.com) 一文带你精通 Git&#xff08;Git 安装与使用、Git 命令精讲、项目的推送与克隆&#xff09;-CSDN博客 Git 常用操作&#xff08;5&#xff…

SpringMVC上传下载文件解读

知识点 文件上传&#xff08;File Upload&#xff09;&#xff1a; 创建一个控制器方法&#xff0c;使用 MultipartFile 参数来接收上传的文件。在 Spring 配置文件中配置一个 MultipartResolver&#xff0c;常用的实现类是 CommonsMultipartResolver。在 MultipartResolver …

laravel8模块化开发laravel-modules

laravel8模块化开发laravel-modules 在laravel目录下打开git输入两行命令 $ composer require nwidart/laravel-modules $ php artisan module:make Admin 这个Admin就是文件名

用Pyinstaller打包深度学习算法为独立的可执行程序

前言&#xff1a;随着深度学习算法的流行&#xff0c;在传统工业软件计算领域&#xff0c;传统算法逐渐被深度学习算法给代替&#xff0c;但由于基于python的深度学习算法十分依赖python环境以及例如Pytorch、Scikit-learning、Keras等机器学习库&#xff0c;将深度学习算法运用…

西南科技大学数字电子技术实验五(用计数器设计简单秒表)预习报告

一、计算/设计过程 说明&#xff1a;本实验是验证性实验&#xff0c;计算预测验证结果。是设计性实验一定要从系统指标计算出元件参数过程&#xff0c;越详细越好。用公式输入法完成相关公式内容&#xff0c;不得贴手写图片。&#xff08;注意&#xff1a;从抽象公式直接得出结…

UE5 PlaceActor

⚠️ 重点 PlaceActors 需在引擎初始化之后 但&#xff0c;单为这一个功能&#xff0c;更改整个模块的启动顺序&#xff0c;也不太划算 更好的办法是&#xff0c;启动顺序保持正常&#xff08;如"LoadingPhase": "Default" &#xff09;&#xff0c;然后…

Java EE 多线程之线程安全的集合类

文章目录 1. 多线程环境使用 ArrayList1. 1 Collections.synchronizedList(new ArrayList)1.2 CopyOnWriteArrayList 2. 多线程环境使用队列2.1 ArrayBlockingQueue2.2 LinkedBlockingQueue2.3 PriorityBlockingQueue2.4 TransferQueue 3. 多线程环境使用哈希表3.1 Hashtable3.…

innerHTML、innerText、textContent有什么区别

innerHTML、innerText、textContent有什么区别 在 HTML 中&#xff0c;innerHTML、innerText、 和textContent是 DOM&#xff08;文档对象模型&#xff09;的属性。它们允许我们读取和更新 HTML 元素的内容。 但它们在包含的内容以及处理 HTML 标签的方式有不同的行为。 读完…

分布式事务seata使用示例及注意事项

分布式事务seata使用示例及注意事项 示例说明代码调用方&#xff08;微服务A&#xff09;服务方&#xff08;微服务B&#xff09; 测试测试一 &#xff0c;seata发挥作用&#xff0c;成功回滚&#xff01;测试二&#xff1a;处理feignclient接口的返回类型从Integer变成String,…

【Spring Boot】快速入门

一、引言 1、什么是spring boot&#xff1f; Spring Boot是由Pivotal团队提供的全新框架&#xff0c;其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置&#xff0c;从而使开发人员不再需要定义样板化的配置。通过这种方式&#xff…

【RocketMQ-Install】Windows 环境下安装 RocketMQ 及基础命令的使用

【RocketMQ-Install】Windows 环境下 安装本地 RocketMQ 及基础命令的使用 1&#xff09;下载 RocketMQ 安装包1.1.官网下载&#xff08;推荐&#xff09;1.2.Git 下载1.3.安装环境要求说明 2&#xff09;Windows 安装3&#xff09;基础命令测试 1&#xff09;下载 RocketMQ 安…

多分类预测 | MATLAB实现CNN-LSTM-Attention多输入分类预测

分类预测 | MATLAB实现CNN-LSTM-Attention多输入分类预测 分类效果 需要源码和数据的私信&#xff08;微微有偿取哦&#xff09;

通义千问 Qwen-72B-Chat在PAI-DSW的微调推理实践

01 引言 通义千问-72B&#xff08;Qwen-72B&#xff09;是阿里云研发的通义千问大模型系列的720亿参数规模模型。Qwen-72B的预训练数据类型多样、覆盖广泛&#xff0c;包括大量网络文本、专业书籍、代码等。Qwen-72B-Chat是在Qwen-72B的基础上&#xff0c;使用对齐机制打造的…

主宰无双H5:WIN学习手工服务端通用视频教程及GM授权物品后台,支持三网H5玩法介绍

标题&#xff1a;主宰无双H5&#xff08;游戏源码&#xff09;&#xff1a;WIN学习手工服务端通用视频教程及GM授权物品后台&#xff0c;支持三网H5玩法的百科 一、引言 随着互联网的快速发展&#xff0c;H5游戏逐渐成为人们休闲娱乐的重要方式。主宰无双H5游戏源码作为一款深…

Android解决报错 superclass access check failed: class

Android解决报错 superclass access check failed: class 前言&#xff1a; 最近在打开之前的项目demo时&#xff0c;出现一个错误Cause: superclass access check failed: class butterknife.compiler.ButterKnifeProcessor$RScanner 1.错误信息如下&#xff1a; Executio…

《Linux C编程实战》笔记:目录操作

目录的创建和删除 mkdir函数 #include <sys/stat.h> #include <sys/types.h> int mkdir(const char *pathname, mode_t mode); mkdir创建一个新的空目录。空目录中会自动创建.和..目录项。所创建的目录的存取许可权由mode (mode &~umask)指定。 新创建目录的…

[Linux] LVS负载均衡群集+NAT部署

一、LVS负载均衡群集知识 1.1 群集的的定义及意义 Cluster&#xff0c;集群&#xff08;也称群集&#xff09;由多台主机构成&#xff0c;但对外只表现为一一个整体&#xff0c;只提供一-个访问入口(域名或IP地址)&#xff0c; 相当于一台大型计算机。 群集的作用&#xff1…

vue3使用Mars3D写区块地图

效果图 引入相关文件 因为我也是第一次使用&#xff0c;所以我是把插件和源文件都引入了&#xff0c;能使用启动 源文件 下载地址&#xff1a; http://mars3d.cn/download.html 放入位置 在index.html中引入 <!--引入cesium基础lib--><link href"/static/C…

Kubernetes 容器编排 -- 1

前言 知识扩展 早在 2015 年 5 月&#xff0c;Kubernetes 在 Google 上的搜索热度就已经超过了 Mesos 和 Docker Swarm&#xff0c;从那儿之后更是一路飙升&#xff0c;将对手甩开了十几条街,容器编排引擎领域的三足鼎立时代结束。 目前&#xff0c;AWS、Azure、Google、阿里…