mybatis基础知识


title: mybatis的基础知识

创建mybatis数据库,创建user表,在里面添加数据

在这里插入图片描述

创建空项目,创建maven模块

在这里插入图片描述

导入相关的依赖

在pom.xml文件中导入mysql,junit测试,mybatis依赖。

<!--导入mysql依赖--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.30</version></dependency>
<!--导入mybatis依赖--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.10</version></dependency>
<!--导入junit测试依赖--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency>

编写mybatis核心配置文件

resource目录主要是存放一些配置文件,在resource目录下创建mybatis-config.xml配置文件,mybatis-config.xml配置文件中主要是存放数据库的连接信息和加载mapper映射文件,映射文件中存放了一些sql语句。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><environments default="development"><environment id="development"><transactionManager type="JDBC"/><!--数据库的连接信息--><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&amp; serverTimezone=Hongkong&amp; characterEncoding=utf-8&amp; autoReconnect=true"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments><!--加载mapper映射文件,该文件中有相关的sql语句--><mappers><mapper resource="UserMapper.xml"/></mappers>
</configuration>

编写UserMapper.xml配置文件

在resource目录下创建一个UserMapper.xml配置文件。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace叫做命名空间-->
<!--
id是sql语句的唯一标识,
resultType叫做返回的结果类型-->
<mapper namespace="test"><select id="selectAll" resultType="com.acwer.pojo.User">select *from user;</select>
</mapper>

同时需要更改mybatis-config.xml文件中mapper标签中的代码,让其加载mapper映射文件

<!--加载mapper映射文件,该文件中有相关的sql语句--><mappers><mapper resource="UserMapper.xml"/></mappers>

编写pojo类

编写结果集返回的对象类型,即为com.acwer.pojo.User类。

package com.acwer.pojo;public class User {//变量名要和数据库中的字段名一致private int id;private String name;private String pwd;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPwd() {return pwd;}public void setPwd(String pwd) {this.pwd = pwd;}@Overridepublic String toString() {return "User{" +"id=" + id +", name='" + name + '\'' +", pwd='" + pwd + '\'' +'}';}
}

编写一个测试类

编写一个测试类,即为mybatisDemo类。

package com.acwer;import com.acwer.pojo.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;
import java.io.InputStream;
import java.util.List;/*** Mybatis 快速入门代码*/
public class mybatisDemo {public static void main(String[] args) throws IOException {//1. 加载mybatis的核心配置文件,获取 SqlSessionFactory实例化对象String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//2. 获取SqlSession对象,用它来执行sqlSqlSession sqlSession = sqlSessionFactory.openSession();//3. 执行sql//sqlSession对象可以执行sql语句,// 而selectList()括号内的参数test.selectAll表示的是可以追踪到命名为test的//命名空间(namespace),又追踪到id为selectAll的标识。List<User> users = sqlSession.selectList("test.selectAll");for(User user:users){System.out.println(user.getId()+" "+user.getName()+" "+user.getPwd());}//4. 释放资源sqlSession.close();}
}

代理mapper

上面的sqlSession.selectList(“test.selectAll”); 方法中的参数test.selectAll其实还是硬编码,我们需要通过不同的文件来对其进行调整,这就是mapper代理存在的价值。

1.在java下创建一个com.acwer. mapper.UserMapper接口

package com.acwer.mapper;import com.acwer.pojo.User;import java.util.List;public interface UserMapper {/**   mybatis面向接口编程的两个一致:*   1. 映射文件的namespace要和mapper接口的类名保持一致。*   2. 映射文件的sql语句的id要和mapper接口的方法名保持一致。*   这两句话可以这样理解,例如userMapper.selectAll(),userMapper是*   UserMapper的实例化对象,到调用该方法时,我们通过UserMapper(类名)定位可以寻找到UserMapper*   的配置文件的mapper标签,通过selectAll()(方法名)可以找到相应的id,进一步缩小范围,即select*   标签中的sql语句。* */List<User> selectAll();
}
  1. 在resources文件夹下创建一个mapper文件夹,在mapper目录下创建一个UserMapper.xml目录。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace叫做命名空间-->
<!--
id是sql语句的唯一标识,
resultType叫做返回的结果类型-->
<mapper namespace="com.acwer.mapper.UserMapper"><select id="selectAll" resultType="com.acwer.pojo.User">select *from user;</select>
</mapper>
  1. 在mybatis-config核心配置文件中,修改mapper标签的resource的内容,改成相应的映射文件的地址,即为mapper/UserMapper.xml。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><environments default="development"><environment id="development"><transactionManager type="JDBC"/><!--数据库的连接信息--><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&amp; serverTimezone=Hongkong&amp; characterEncoding=utf-8&amp; autoReconnect=true"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments><!--加载mapper映射文件,该文件中有相关的sql语句--><mappers><mapper resource="mapper/UserMapper.xml"/></mappers>
</configuration>

测试结果

在这里插入图片描述

junit测试

在test的目录下,在java目录下创建一个com.acwer.mybatis.test.mybatisTest类。

package com.acwer.mybatis.test;
import com.acwer.mapper.UserMapper;
import com.acwer.pojo.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.*;
import java.io.*;
import java.util.List;public class mybatisTest {public static void main(String[] args) throws IOException {//加载核心配置文件InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");//获取SqlSessionFactoryBuilder对象SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();//用SqlSessionFactoryBuilder对象来获取SqlSessionFactory对象SqlSessionFactory sqlSessionFactory =sqlSessionFactoryBuilder.build(inputStream);//获取SqlSession对象SqlSession sqlSession = sqlSessionFactory.openSession(true);//true表示自动提交事务。//获取mapper接口对象UserMapper userMapper = sqlSession.getMapper(UserMapper.class);//执行sql语句,测试功能int t = userMapper.insert();System.out.println(t);List<User> users = userMapper.selectAll();for(User user:users){System.out.println(user.getId()+" "+user.getName()+" "+user.getPwd());}  }
}

删除操作代码

1. 在UserMapper接口中添加int delete()方法,在UserMapper.xml映射文件中
添加delete的相关信息,然后在测试代码中添加delete()的相关测试代码。

更新操作代码

和上面的删除,插入操作基本类似。

查询操作代码

和上面的删除,插入操作基本类似。

注意
测试结果时,可能会出现java: 错误: 不支持发行版本错误信息,此时我们需要调高Java编译器的字节码版本,调到12以上就可以了。

package的使用

在一般的情况下,我们肯定要导入多个映射文件,所以我们要使用package,然后规定的包下所有的映射文件进行加载。

修改mybatis-config.xml配置文件

<!--加载mapper映射文件,该文件中有相关的sql语句--><mappers><!--<mapper resource="mapper/UserMapper.xml"/>--><!--映射文件目录和映射接口目录需要保持一样的,即映射文件目录:com/acwer/mapper/映射接口目录:com/acwer/mapper/--><package name="com.acwer.mapper"/></mappers>

如果目录没要保持一致,可能会报错!

properties的使用

在mybatis-config.xml文件中dataSource标签中还是存在硬编码,我们需要通过一个properties文件来使得更加地灵活。我们可以将driver,url,username
,password的信息用properties文件进行储存。

  1. mybatis-config.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!--导入jdbc.properties配置文件--><properties resource="jdbc.properties"/><environments default="development"><environment id="development"><transactionManager type="JDBC"/><!--数据库的连接信息--><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></dataSource></environment></environments><!--加载mapper映射文件,该文件中有相关的sql语句--><mappers><!--<mapper resource="mapper/UserMapper.xml"/>--><!--映射文件目录和映射接口目录需要保持一样的,即映射文件目录:com/acwer/mapper/映射接口目录:com/acwer/mapper/--><package name="com.acwer.mapper"/></mappers>
</configuration>
  1. jdbc.properties文件
    在resource下创建一个jdbc.properties文件。
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?useSSL=false
jdbc.username=root
jdbc.password=123456

mybatis获取参数值的几种方式

1. 当方法内只有一个参数时

  • UserMapper接口
User selectByName(String name);
  • UserMapper.xml
<!--单个参数时。${}表示的是占位符,会自动加上单引号。#{}表示的是字符串拼接,不会自动加上单引号,我们需要手动地加上单引号。
--><select id="selectByName" resultType="com.acwer.pojo.User">select * from user where name=#{name};</select>

2. 当方法内有多个参数时

  • UserMapper接口
User checkLogin(int id,String name);
  • UserMapper.xml文件
<!--多个参数时。select * from user where id = #{id} and name = #{name};这样写会报错当方法内有多个参数时,这些参数会放到[arg0,arg1,param1,param2]这个集合中,->arg0,arg1为键,他们对应的参数为值。->param1,param2为键,他们对应的参数为值。#{}表示的意思是通过键来访问所对应的参数值。我们只需这样写:select * from user where id = #{arg0} and name = #{arg1};或者select * from user where id = #{param1} and name = #{param2};
--><select id="checkLogin" resultType="com.acwer.pojo.User">select * from user where id = #{param1} and name = #{param2};</select>

3. map存储

  • UserMapper接口
<!--mapper接口方法的参数有多个时,可以手动将这些参数放到一个map集合中进行存储。#{} 通过键可以访问值
--><select id="checkLoginByMap" resultType="com.acwer.pojo.User">select * from user where name=#{name} and pwd=#{pwd};</select>
  • UserMapper.xml文件
<!--mapper接口方法的参数有多个时,可以手动将这些参数放到一个map集合中进行存储。#{} 通过键可以访问值
--><select id="checkLoginByMap" resultType="com.acwer.pojo.User">select * from user where name=#{name} and pwd=#{pwd};</select>

4. param注解(重点)

  • UserMapper接口
//Param("name")表示的是键,String name表示的是值。
User checkLoginByParam(@Param("name") String name,@Param("pwd") String password);
  • UserMappe.xml配置文件
<select id="checkLoginByParam" resultType="com.acwer.pojo.User">select * from user where name=#{name} and pwd=#{pwd};
</select>

模糊查询

  • UserMapper接口
   List<User> selectByLike(@Param("name") String name);
  • UserMapper.xml
<!--这里应该使用${},如果使用#{}可能识别不出-->
<mapper namespace="com.acwer.mapper.UserMapper"><select id="selectByLike" resultType="com.acwer.pojo.User">select *from user where name like '%${name}%';</select>
</mapper>

别名配置优化

实体类的地址名字太长,我们可以通过别名将名字进行简化。typeAliases标签需要放到configuration标签里第二个位置,第一个位置是properties标签。

*** mybatis-config.xml配置文件**

<!--给实体类取别名--><typeAliases><typeAlias type="com.acwer.pojo.User" alias="User"/></typeAliases>
  • UserMapper.xml配置文件
<mapper namespace="com.acwer.mapper.UserMapper"><select id="selectByLike" resultType="User">select *from user where name like '%${name}%';</select>
</mapper>

字段名和属性名不一样如何解决?

  1. 给字段名取和属性名一样的别名。
<mapper namespace="com.acwer.mapper.UserMapper"><select id="select" resultType="User">select id,name, pwd as password from user;</select>
</mapper>
  1. 通过resultMap来解决
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.acwer.mapper.UserMapper">
<!--创建一对resultMap标签,让select的resultMap和resultMap的id产生映射关系,property表示的是实体类的属性名,column表示的是数据库的字段名。
--><resultMap id="result1" type="com.acwer.pojo.User"><!--id标签表示是主键--><id property="id" column="id"></id><!--result表示的是普通字段名--><result property="name" column="name"></result><result property="password" column="pwd"></result></resultMap><select id="select" resultMap="result1">select *from user;</select>
</mapper>

动态mysql

Mybatis框架的动态SQL技术是一种根据特定条件动态拼装SQL语句的功能,它存在的意义是为了解决拼接SQL语句字符串时的痛点问题。
if标签可通过test属性的表达式进行判断,若表达式的结果为true,则标签中的内容会执行;反之标签中的内容不会执行。

  • if语句
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.acwer.mapper.UserMapper"><resultMap id="result1" type="com.acwer.pojo.User"><id property="id" column="id"></id><result property="name" column="name"></result><result property="password" column="pwd"></result></resultMap><!--resultMap相当于起到了映射的作用--><select id="select" resultMap="result1">select * from user where 1=1<!--name!=null 等号左边name是属性变量name=#{name} 等号左边的是字段名,右边的是属性值。--><if test="name!=null and name!=''">and name = #{name}</if><if test="password!=null and password!=''">and pwd = #{password}</if></select>
</mapper>
  • choose when otherwise
    choose when otherwise 相当于if else-if else
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.acwer.mapper.UserMapper"><select id="select" resultType="User">select * from user<where><choose><when test="id!=null and id!=''">id = #{id}</when><when test="name!=null and name!=''">and name = #{name}</when><when test="password!=null and password!=''">and pwd = #{password}</when><otherwise>and id = 5</otherwise></choose></where></select>
</mapper>

插入操作

<insert id="insert">insert into user values (#{id},#{name},#{password});</insert>

更新操作

<update id="update">update user set id=#{id},pwd=#{password} where name='kris';</update>

单个删除

<delete id="deleteById">delete from user where id=#{id};</delete>

批量删除

  • UserMapper接口
public interface UserMapper {//a[]的键是aint delete(@Param("a") int a[]);
}
  • UserMapper.xml配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.acwer.mapper.UserMapper"><delete id="delete">delete from user where idin(<!--a表示的是数组,t表示的是数组中的每一个元素,逗号表示分隔--><foreach collection="a" item="t" separator=",">#{t}</foreach>)</delete>
</mapper>

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

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

相关文章

四步搞定国赛!快速入门大小模型融合的AI产品开发

前不久&#xff0c;2024中国大学生服务外包创新创业大赛正式启动&#xff01;作为中国高等教育学会“全国普通高校学科竞赛排行榜”竞赛&#xff0c;飞桨赛道已经吸引了超过200位选手报名参赛。 本文旨在助力“A01-基于文心大模型智能阅卷平台设计”赛道选手&#xff0c;更快地…

7.【SpringBoot3】项目部署、属性配置、多环境开发

1. SpringBoot 项目部署 项目完成后&#xff0c;需要部署到服务器上。 SpringBoot 项目需要经过编译打包生成一个 jar 包&#xff08;借助打包插件 spring-boot-maven-plugin&#xff09;&#xff0c;再将该 jar 包发送或拷贝到服务器上&#xff0c;然后就可以通过执行 java …

手机视频压缩怎么压缩?一键瘦身~

现在手机已经成为我们日常生活中必不可少的工具&#xff0c;而在手机的应用领域中&#xff0c;文件的传输和存储是一个非常重要的问题。很多用户都会遇到这样一个问题&#xff0c;那就是在手机上存储的文件太多太大&#xff0c;导致手机存储空间不足&#xff0c;那么怎么在手机…

Typora 无法导出 pdf 问题的解决

目录 问题描述 解决困难 解决方法 问题描述 Windows 下&#xff0c;以前&#xff08;Windows 11&#xff09; Typora 可以顺利较快地由 .md 导出 .pdf 文件&#xff0c;此功能当然非常实用与重要。 然而&#xff0c;有一次电脑因故重装了系统&#xff08;刷机&#xff09;…

SpringMVC 环境搭建入门

SpringMVC 是一种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架&#xff0c;属于SpringFrameWork 的后续产品&#xff0c;已经融合在 Spring Web Flow 中。 SpringMVC 已经成为目前最主流的MVC框架之一&#xff0c;并且随着Spring3.0 的发布&#xff0c;全面…

论述Python中列表、元组、字典和集合的概念

Python列表是用于存储任意数目、任意类型的数据集合&#xff0c;包含多个元素的有序连续的内存空间&#xff0c;是内置可变序列&#xff0c;或者说可以任意修改。在Python中&#xff0c;列表以方括号&#xff08;[ ]&#xff09;形式编写。 Python元组与Python列表类似&#x…

Flink 集成 Debezium Confluent Avro ( format=debezium-avro-confluent )

博主历时三年精心创作的《大数据平台架构与原型实现:数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行,点击《重磅推荐:建大数据平台太难了!给我发个工程原型吧!》了解图书详情,京东购书链接:https://item.jd.com/12677623.html,扫描左侧二维…

docker生命周期管理命令

文章目录 前言1、docker create2、docker run2.1、常用选项2.2、系统2.3、网络2.4、健康检查 3、docker start/stop/restart4、docker kill5、docker rm6、docker pause/unpause总结 前言 在云原生时代&#xff0c;Docker已成为必不可少的容器管理工具。通过掌握Docker常用的容…

[UE]无法接收OnInputTouchBegin事件

遇到问题 想做一个鼠标按住左键选中Actor拖动而旋转的功能&#xff0c;想法是通过OnInputTouchBeginOnInputTouchEndTick实现。但是却无法接收OnInputTouchBegin与OnInputTouchEnd事件。 解决方案 想要触发OnInputTouchBegin事件 1.需要设置勾选ProjectSettings->Input-&…

.net访问oracle数据库性能问题

问题&#xff1a; 生产环境相同的inser语句在别的非.NET程序相应明显快于.NET程序&#xff0c;执行时间相差比较大&#xff0c;影响正常业务运行&#xff0c;测试环境反而正常。 问题详细诊断过程 问题初步判断诊断过程&#xff1a; 查询插入慢的sql_id 检查对应的执行计划…

Python zip函数

在Python编程中&#xff0c;zip()函数是一个功能强大而灵活的工具&#xff0c;用于将多个可迭代对象&#xff08;如列表、元组、字符串等&#xff09;组合成一个元组的序列。本文将深入探讨zip()函数的用法、语法、示例代码&#xff0c;并探讨其在实际编程中的应用场景。 什么…

HNU-数据挖掘-实验2-数据降维与可视化

数据挖掘课程实验实验2 数据降维与可视化 计科210X 甘晴void 202108010XXX 文章目录 数据挖掘课程实验<br>实验2 数据降维与可视化实验背景实验目标实验数据集说明实验参考步骤实验过程1.对数据进行初步降维2.使用无监督数据降维方法&#xff0c;比如PCA&#xff0c;I…

EasyExcel实现导出图片到excel

pom依赖&#xff1a; <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.0</version> </dependency> 实体类&#xff1a; package com.aicut.monitor.vo;import com.aicut.monit…

Django开发_20_form表单前后端关联(2)

根据上一篇文章的代码,进一步了解掌握GET,POST的运行机制 一、实例代码 views.py: def show_reverse(request):if request.method "GET":return redirect(reverse("work4:fill"))if request.method "POST":hobby request.POST.get("h…

kafka summary

最近整体梳理之前用到的一些东西&#xff0c;回顾Kafka的时候好多东西都忘记了&#xff0c;把一些自己记的比较模糊并且感觉有用的东西整理一遍并且记忆一遍&#xff0c;仅用于记录以备后续回顾 Kafka的哪些场景中使用了零拷贝 生产者发送消息&#xff1a;在 Kafka 生产者发送…

暴力破解

暴力破解工具使用汇总 1.查看密码加密方式 在线网站&#xff1a;https://cmd5.com/ http://www.158566.com/ https://encode.chahuo.com/kali&#xff1a;hash-identifier2.hydra 用于各种服务的账号密码爆破&#xff1a;FTP/Mysql/SSH/RDP...常用参数 -l name 指定破解登录…

windows定时任务的查看、取消、启动和创建

一、查看 Windows 自动执行的指令 1.使用任务计划程序&#xff1a;任务计划程序是 Windows 内置的工具&#xff0c;可以用于创建、编辑和管理计划任务。您可以按照以下步骤查看已设置的计划任务&#xff1a; 1.1 按下 Win R 键&#xff0c;然后输入 “taskschd.msc”&#xff…

Bitbucket第一次代码仓库创建/提交/创建新分支/合并分支/忽略ignore

1. 首先要在bitbucket上创建一个项目&#xff0c;这个我没有权限创建&#xff0c;是找的管理员创建的。 管理员创建之后&#xff0c;这个项目给了我权限&#xff0c;我就可以创建我的代码仓库了。 2. 点击这个Projects下的具体项目名字&#xff0c;就会进入这样一个页面&#…

docker 存储管理

文章目录 docker 存储管理容器存储方案docker 容器存储解决方案 docker 存储驱动基本概述存储驱动的选择原则主流的 docker 存储驱动docker 版本支持的存储驱动 overlay2 存储驱动OverlayFSoverlay2 存储驱动要求配置 docker 使用 overlay2 驱动 overlay2 存储驱动的工作机制Ov…

Azure Private endpoint DNS 记录是如何解析的

Private endpoint 从本质上来说是Azure 服务在Azure 虚拟网络中安插的一张带私有地址的网卡。 举例来说如果Storage account在没有绑定private endpoint之前&#xff0c;查询Storage account的DNS记录会是如下情况&#xff1a; Seq Name …