mybatis-plus学习笔记

news2024/9/22 14:36:23

文章目录

  • 1 简介
  • 2 初始化项目
    • 2.1引入pom
    • 2.2 引入lombok插件
    • 2.3 配置信息
    • 2.4 创建实体类
    • 2.5 创建mapper
    • 2.6 配置注解MapperScan
    • 2.7 编写测试类
    • 2.8 配置MyBatis日志
  • 3 测试基本的CRUD
    • 3.1 新增
    • 3.2 查询
    • 3.3 修改
    • 3.4 删除
  • 4 自定义动态sql
  • 5 Service 层使用mybatis-plus方法
    • 5.1 service层代码
    • 5.2 测试查询总记录数
    • 5.3 测试批量新增
  • 6 id不是用雪花算法,自己定义
  • 7 雪花算法
  • 8 wapper条件构造器
    • 8.1 QueryWrapper(查询、删除、修改)
    • 8.2 UpdateWrapper
    • 8.3 LambdaQueryWrapper
    • 8.4 LambdaUpdateWrapper
  • 9 插件
    • 9.1 分页插件
    • 9.2 乐观锁和悲观锁
  • 10 代码生成器
    • 10.1引入以依赖
    • 10.2 生成代码

1 简介

MyBatis-Plus是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。MyBatis-Plus提供了通用的mapper和service,可以在不编写任何SQL语句的情况下,快速的实现对单表的CRUD、批量、逻辑删除、分页等操作。

2 初始化项目

2.1引入pom

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- mybatis-plus -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>
        <!-- 简化实体类开发 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!-- mysql驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
    </dependencies>

2.2 引入lombok插件

在这里插入图片描述

2.3 配置信息

spring:
# 配置数据源信息
  datasource:
# 配置数据源类型(spring默认的数据源)
    type: com.zaxxer.hikari.HikariDataSource
# 配置连接数据库信息(配置驱动类,版本为8)
    driver-class-name: com.mysql.cj.jdbc.Driver
#mysql8版本的写法
    url: jdbc:mysql://localhost:3306/mybatis_plus?serverTimezone=GMT%2B8&characterEncoding=utf-8&useSSL=false
    username: root
    password: yuan159951.

# mysql5版本的写法
# driver-class-name: com.mysql.jdbc.Driver
# url: jdbc:mysql://localhost:3306/mybatis_plus?characterEncoding=utf-8&useSSL=false

2.4 创建实体类

import lombok.Data;

@Data //lombok注解
public class User {
        private Long id;
        private String name;
        private Integer age;
        private String email;   
}

2.5 创建mapper

import com.yunfeng.mybatisplus.pojo.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;

public interface UserMapper extends BaseMapper<User> {
}

2.6 配置注解MapperScan

@SpringBootApplication
//扫描mapper接口所在的包
@MapperScan("com.yunfeng.mybatisplus.mapper")
public class MybatisplusApplication {

    public static void main(String[] args) {
        SpringApplication.run(MybatisplusApplication.class, args);
    }

}

2.7 编写测试类

import com.yunfeng.mybatisplus.mapper.UserMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class MybatisPlusTest {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void testSelectList(){
        //selectList()根据MP内置的条件构造器查询一个list集合,null表示没有条件,即查询所有
        userMapper.selectList(null).forEach(System.out::println);
    }
}

2.8 配置MyBatis日志

# 配置MyBatis日志
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

3 测试基本的CRUD

3.1 新增

@Test
    public void testInsert(){
        User user = new User();
        user.setName("张三");
        user.setAge(18);
        user.setEmail("302976975@qq.com");
        int row = userMapper.insert(user);
        System.out.println("row = " + row);
        System.out.println(user.getId());
    }

3.2 查询

    @Test
    public void testSelectById(){
//        User user = userMapper.selectById(1L);
//        System.out.println(user);
//        List<Long> longs = Arrays.asList(1l, 2l, 3l);
//        List<User> users = userMapper.selectBatchIds(longs);
//        System.out.println("users = " + users);
//        Map<String,Object> map = new HashMap<>();
//        map.put("name","jack");
//        map.put("age",20);
//        List<User> users = userMapper.selectByMap(map);
//        System.out.println("users = " + users);
        List<User> users = userMapper.selectList(null);
        System.out.println("users = " + users);
    }

3.3 修改

@Test
    public void testUpdateById(){
        User user = new User();
        user.setId(4L);
        user.setName("李四");
        int result = userMapper.updateById(user);
        System.out.println("受影响行数:"+result);
    }

3.4 删除

    @Test
    public void testDeleteById(){
//        int result = userMapper.deleteById(1595594324846141442L);
//        System.out.println("受影响行数:"+result);
//        Map<String,Object> map = new HashMap<>();
//        map.put("name","张三");
//        map.put("age",18);
//        userMapper.deleteByMap(map);
        List<Long> longs = Arrays.asList(1l, 2l, 3l);
        int rows = userMapper.deleteBatchIds(longs);
        System.out.println("rows = " + rows);
    }

4 自定义动态sql

  • 默认位置可以不写!
    在这里插入图片描述
  • 新增mybatis模板文件
    在这里插入图片描述
  • 官方模板文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yunfeng.mybatisplus.mapper.UserMapper">

</mapper>
  • UserMapper接口代码
Map<String,Object> selectMapById(Long id);
  • UserMapper.xml代码
<select id="selectMapById" resultType="map">
        select * from user where id = #{id}
    </select>
  • 测试类
Map<String, Object> map = userMapper.selectMapById(1l);
        System.out.println("map = " + map);

5 Service 层使用mybatis-plus方法

5.1 service层代码

  • 接口
public interface UserService  extends IService<User> {
}
  • 实现类
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper,User> implements UserService{

}

5.2 测试查询总记录数

@Test
    public void testGetCount(){
        long count = userService.count();
        System.out.println("count = " + count);
    }

5.3 测试批量新增

	@Test
    public void testSaveBatch(){
// SQL长度有限制,海量数据插入单条SQL无法实行,
// 因此MP将批量插入放在了通用Service中实现,而不是通用Mapper
        ArrayList<User> users = new ArrayList<>();
        for (int i = 0; i < 5; i++) {
            User user = new User();
            user.setName("ybc" + i);
            user.setAge(20 + i);
            users.add(user);
        }
//SQL:INSERT INTO t_user ( username, age ) VALUES ( ?, ? )
        boolean bool = userService.saveBatch(users);
        System.out.println("bool = " + bool);
    }

6 id不是用雪花算法,自己定义

@Data //lombok注解
@TableName("user")
public class User {

//IdType.AUTO就是自增
        @TableId(value = "id",type = IdType.AUTO)
        private Long id;
        @TableField("name")
        private String name;
        private Integer age;
        private String email;
		//逻辑删除
        @TableLogic
        private Integer isDeleted;
}
  • 配置方法
# 配置MyBatis
mybatis-plus:
  configuration:
    # 日志信息
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    db-config:
      # 配置MyBatis-Plus的主键策略
      id-type: auto
    # 配置MyBatis-Plus操作表的默认前缀
#      table-prefix:
  # 配置类型别名所对应的包
  type-aliases-package: com.yunfeng.mybatisplus.pojo
  # 配置扫描通用枚举
  type-enums-package: com.yunfeng.mybatisplus.enums

7 雪花算法

雪花算法是由Twitter公布的分布式主键生成算法,它能够保证不同表的主键的不重复性,以及相同表的
主键的有序性。

  • 和时间有关。
  • ①核心思想:
    长度共64bit(一个long型)。
    首先是一个符号位,1bit标识,由于long基本类型在Java中是带符号的,最高位是符号位,正数是0,负
    数是1,所以id一般是正数,最高位是0。
    41bit时间截(毫秒级),存储的是时间截的差值(当前时间截 - 开始时间截),结果约等于69.73年。
    10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID,可以部署在1024个节点)。
    12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID)。
  • ②优点:整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞,并且效率较高。
    在这里插入图片描述

8 wapper条件构造器

8.1 QueryWrapper(查询、删除、修改)

  • 查询
	@Test
    public void test01(){
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.like("name","a")
                .between("age",20,30)
                .isNotNull("email");
        List<User> users = userMapper.selectList(queryWrapper);
        users.forEach(System.out::println);
    }
  • 查询排序
	@Test
    public void test02(){
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.orderByDesc("age")
                .orderByAsc("id");
        List<User> users = userMapper.selectList(queryWrapper);
        users.forEach(System.out::println);
    }
  • 删除
	@Test
    public void test03(){
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.isNull("email");
        int row = userMapper.delete(queryWrapper);
        System.out.println("row = " + row);
    }
  • 条件修改
	@Test
    public void test04(){
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.gt("age",20)
                .like("name","a")
                .or()
                .isNull("email");
        User user = new User();
        user.setName("张三");
        int rows = userMapper.update(user, queryWrapper);
        System.out.println("rows = " + rows);
    }
  • lambda中的条件优先执行
@Test
    public void test05(){
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        //lambda中的条件优先执行
        queryWrapper.like("name","a")
                .and(i -> i.gt("age",20).or().isNull("email"));
        User user = new User();
        user.setName("李四");
        int rows = userMapper.update(user, queryWrapper);
        System.out.println("rows = " + rows);
    }
  • 查询部分字段
//查询部分字段
    @Test
    public void test06(){
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.select("name","age");
        List<Map<String, Object>> maps = userMapper.selectMaps(queryWrapper);
        maps.forEach(System.out::println);
    }
  • 子查询
// 子查询
    @Test
    public void test07(){
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.inSql("age","select age from user where age < 20");
        List<User> users = userMapper.selectList(queryWrapper);
        users.forEach(System.out::println);
    }

8.2 UpdateWrapper

  • UpdateWrapper修改不需要new实体类
@Test
    public void test08(){
        UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
        updateWrapper.like("name","a")
                .and( i -> i.gt("age",20).or().isNull("email"));
        updateWrapper.set("name","王五");
        int rows = userMapper.update(null, updateWrapper);
        System.out.println("rows = " + rows);
    }
  • 条件组装
@Test
    public void test10(){
        String name = "";
        Integer ageBegin = 20;
        Integer ageEnd = 30;
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.like(StringUtils.isNotBlank(name),"name",name)
                .ge(ageBegin != null,"age",ageBegin)
                .gt(ageEnd != null,"age",ageEnd);
        List<User> users = userMapper.selectList(queryWrapper);
        users.forEach(System.out::println);
    }

8.3 LambdaQueryWrapper

@Test
    public void test11(){
        String name = "";
        Integer ageBegin = 20;
        Integer ageEnd = 30;
        LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.like(StringUtils.isNotBlank(name),User::getName,name)
                .ge(ageBegin != null,User::getAge,ageBegin)
                .gt(ageEnd != null,User::getAge,ageEnd);
        List<User> users = userMapper.selectList(queryWrapper);
        users.forEach(System.out::println);
    }

8.4 LambdaUpdateWrapper

@Test
    public void test12(){
        LambdaUpdateWrapper<User> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.like(User::getName,"a")
                .and( i -> i.gt(User::getAge,20).or().isNull(User::getEmail));
        updateWrapper.set(User::getName,"赵六");
        int rows = userMapper.update(null, updateWrapper);
        System.out.println("rows = " + rows);
    }

9 插件

9.1 分页插件

  • 写配置类
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
//扫描mapper接口所在的包
@MapperScan("com.atguigu.mybatisplus.mapper")
public class MyBatisPlusConfig {

    //分页插件
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }

}
  • 测试
@Test
    public void testPage(){
        Page<User> page = new Page<>(2,3);
        userMapper.selectPage(page, null);
        System.out.println("page = " + page);
    }

9.2 乐观锁和悲观锁

  • 添加@Version注解
@Data
public class Product {
private Long id;
private String name;
private Integer price;
@Version
private Integer version;
}
  • 添加插件
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
	MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
	//添加分页插件
	interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
	//添加乐观锁插件
	interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
	return interceptor;
}

10 代码生成器

  • 官网地址:https://baomidou.com/pages/779a6e/#%E5%AE%89%E8%A3%85

10.1引入以依赖

<!-- 代码生成器 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.5.1</version>
        </dependency>

        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.31</version>
        </dependency>

10.2 生成代码

public static void main(String[] args) {
        FastAutoGenerator.create("jdbc:mysql://127.0.0.1:3306/mybatis_plus?characterEncoding=utf-8&userSSL=false", "root", "yuan159951.")
                .globalConfig(builder -> {
                    builder.author("logic") // 设置作者
                            //.enableSwagger() // 开启 swagger 模式
                            .fileOverride() // 覆盖已生成文件
                            .outputDir("D://mybatis_plus"); // 指定输出目录
                })
                .packageConfig(builder -> {
                             builder.parent("com.yunfeng") // 设置父包名
                                    .moduleName("mybatisplus") // 设置父包模块名
                                    .pathInfo(Collections.singletonMap(OutputFile.mapperXml, "D://mybatis_plus")); // 设置mapperXml生成路径
                })
                .strategyConfig(builder -> {
                            builder.addInclude("user") // 设置需要生成的表名
                                   .addTablePrefix("t_", "c_"); // 设置过滤表前缀
                })
                .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker 引擎模板,默认的是Velocity引擎模板
                .execute();
    }

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

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

相关文章

使用hive进行大数据项目分析

目录 一、首先要创建表&#xff1a;在txt记事本中先输入创建语句备用&#xff0c;创建class1~class5的表。 二、启动hadoop集群&#xff0c;MySQL&#xff0c;hive。 三、创建数据库zhh&#xff0c;用户为zhh&#xff0c;之后将之前写在txt记事本里的创建表class1~class5的命…

浅谈企业信息化安全建设中的三大误区

伴随着信息化的深度建设与应用&#xff0c;与之相伴的信息安全事件也层出不穷&#xff01;很多企业开始关注信息安全问题、关注信息安全建设&#xff0c;大家的共识已经达到前所未有的高度。 虽然许多的企业虽然认识到信息安全的重要性&#xff0c;在实际实施过程中却又无从下…

【附源码】计算机毕业设计JAVA亦心化妆品网站

【附源码】计算机毕业设计JAVA亦心化妆品网站 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JAVA myba…

【软件测试】我们测试人搭上元宇宙的列车,测试一直在进军......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 虚拟宇宙&#xff0…

微信抽奖小程序开发_分享微信抽奖小程序制作的步骤

各位商家在节日期间做活动的时候&#xff0c;都希望用更少的费用去或者更好的宣传和推广的效果。比较常见的就是抽奖活动小程序。无须玩家下载&#xff0c;通过微信扫码或者指定入口就可以参与。 方便&#xff0c;效果又好。 那么,性价比高的抽奖活动小程序怎么做&#xff1f…

使用 MITRE ATTCK 技术保护您的 Active Directory安全

Active Directory (AD域)保存着企业的敏感数据&#xff0c;例如用户凭据、员工的个人信息、安全权限等。正因为如此&#xff0c;AD域很容易成为网络攻击者的目标。恶意攻击者不断升级新的攻击策略&#xff0c;使企业保护AD域安全成为一项挑战。这就是为什么每个企业都必须制定网…

scratch猫捉老鼠 电子学会图形化编程scratch等级考试一级真题和答案解析2022年9月

目录 scratch猫捉老鼠 一、题目要求 1、准备工作 2、功能实现 二、案例分析

【U8+】用友U8成本管理模块下,定额分配标准中无法取到新增存货的数据。

【问题描述】 用友U8&#xff0c;新增存货后&#xff0c; 在【成本管理】模块下&#xff0c;操作【定额分配标准】取数后&#xff0c;无法取到新增存货数据。 【解决方案】 由于没有过多的研究过用友U8的成本管理模块&#xff0c; 以下过程是在处理该问题时&#xff0c;整理的…

java发送邮件

前言 借用hutool工具&#xff0c;实现多账号发送邮件 相关实现 maven依赖 Hutool对所有第三方都是可选依赖&#xff0c;因此在使用MailUtil时需要自行引入第三方依赖。 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</arti…

机器学习笔记之高斯网络(一)基本介绍

机器学习笔记之高斯网络——基本介绍引言回顾&#xff1a;条件独立性概率图模型高斯网络高斯网络介绍高斯网络的条件独立性随机变量之间的边缘独立随机变量之间的条件独立引言 本节将介绍高斯网络 回顾&#xff1a; 条件独立性 在概率图模型——背景介绍中介绍了条件独立性…

Dissertation写作常用的研究方法

英文毕业论文的撰写&#xff0c;有很多值得注意的重要因素&#xff0c;而研究方法的选择无疑是最重要的内容之一。留学毕业论文不同于平常的研究性论文&#xff0c;其难度和复杂程度要大得多&#xff1b;同时&#xff0c;导师对于留学毕业论文的要求又非常严格。因此写好一篇优…

[附源码]SSM计算机毕业设计教务系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

跨境电商卖家必知的【圣诞节营销】终极指南(二)

关键词&#xff1a;圣诞节营销、跨境电商卖家 不知不觉又到了年底&#xff0c;而对于跨境电商来说也是非常重要的一段促销时期&#xff0c;上一篇文章我们探讨了一些圣诞节营销的创意方法&#xff0c;今天我们将告诉您完整的圣诞节营销指南。 1. 闪购和 FOMO 限时抢购是您的电…

ImmunoChemistry艾美捷基本细胞毒性试验试剂盒测定方案

ImmunoChemistry艾美捷基本细胞毒性试验试剂盒是一种通过流式细胞仪测定细胞毒性的单管双色试验。该试验使用绿色荧光细胞染色剂CFSE标记靶细胞&#xff0c;使用红色活/死活性染料7-AAD识别细胞毒性试验样品中存在的死细胞。使用流式细胞仪分析结果。 细胞裂解活性是清除细胞内…

D-012 时钟硬件电路设计

时钟硬件电路设计1 简介2 晶振电路中电容的选择3 时钟电路设计要点4 晶振选型5 电路实战1 简介 晶振时数字电路的心脏&#xff0c;数字电路需要一个稳定的工作时钟信号&#xff0c;时钟电路时硬件电路设计中不可或缺的一个重要内容。晶振一般指晶体振荡器。而在封装内部添加 I…

Shell脚本学习指南(四)——管道的神奇魔力

文章目录前言从结构化文本文件中提取数据针对Web的结构型数据文字解谜好帮手单词列表标签列表前言 当你在UNIX里对付文字处理作业时&#xff0c;必须谨记一个UNIX工具使用原则就是&#xff1a;想清楚这个问题该如何划分为更简单的工作&#xff0c;每个部分是不是已有现成的工具…

Servlet上传文件

一、核心方法 1、HttpServletRequest类相关方法 方法描述Part getPart(String name)获取请求中给定name的文件Collection<Part> getParts()获取所有的文件 2、Part类相关方法 方法描述String getSubmittedFileName()获取文件名String getContentType()获取文件类型…

【Hack The Box】Linux练习-- Knife

HTB 学习笔记 【Hack The Box】Linux练习-- Knife &#x1f525;系列专栏&#xff1a;Hack The Box &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4c6;首发时间&#xff1a;&#x1f334;2022年11月17日&#x1f334; &#x1f36…

Docker——镜像操作命令

目录 一、镜像操作命令 1.1 镜像操作命令&#xff08;常用图示&#xff09; 1.2 查看docker帮助文档 1.3 案例&#xff1a;从DockerHub拉取Nginx镜像并查看 1.3.1 拉取 1.3.2 查看 1.4 案例&#xff1a;利用docker save将Nginx镜像导出磁盘&#xff0c;然后再通过load加…

一文讲清场景工程方法论及运维组织能力内化

随着业务支撑要求的变化&#xff0c;和技术架构的升级&#xff0c;运维管理建设模式跟之前也有了很大区别&#xff0c;场景上更注重主动工作、防范风险&#xff0c;而体系上更注重赋能组织、平台化、一体化。 因而&#xff0c;我们基于过去几年的大量客户实践&#xff0c;分享…