四,SSM整合-前后端分离(实现分页+前后端校验)

分页与校验

  • 实现功能07-分页显示列表
    • 需求分析/图解
    • 思路分析
    • 代码实现
    • 完成测试
  • 实现功能08-带条件查询分页显示列表
    • 需求分析/图解
    • 思路分析
    • 代码实现
  • 实现功能09-添加家居表单前端校验
    • 需求分析/图解
    • 思路分析
    • 代码实现
  • 实现功能10-添加家居表单后端校验
    • 需求分析/图解
    • 思路分析
    • 代码实现
  • SSM项目[前后端分离]小结+作业要求

上一讲, 我们学习的是 SSM整合-前后端分离(实现增删改查)

现在打开furn-ssm项目 和 ssm_vue项目

在这里插入图片描述

实现功能07-分页显示列表

需求分析/图解

在这里插入图片描述

思路分析

1.后台使用MyBatis PageHelper插件完成分页查询.前端使用分页组件.

2.修改FurnController, 增加处理分页显示代码 API/接口

3.完成前台代码, 加入分页导航, 并将分页请求和后台接口结合.

4.简单回顾JavaWeb原生项目的分页模型. 说明: 有了MyBatis PageHelper和前端的分页组件, 完成分页就非常的方便, 但是底层的分页模型和前面我们的java web原生项目一样.

代码实现

1.修改pom.xml, 加入分页插件

<!--引入mybatis pageHelper分页插件-->
<dependency>
  <groupId>com.github.pagehelper</groupId>
  <artifactId>pagehelper</artifactId>
  <version>5.2.1</version>
</dependency>

2.修改mybatis-config.xml, 配置分页拦截器

<!--说明
1.plugins标签需要放在typeAliases标签后, 是DOCTYPE约束的
2.配置分页拦截器
-->
<plugins>
    <plugin interceptor="com.github.pagehelper.PageInterceptor">
        <!--解读
        配置分页合理化
        1.如果用户请求的pageNum > pages, 就显示查询最后一页
        2.如果用户请求的pageNum < 0, 就显示查询第一页
        -->
        <property name="reasonable" value="true"/>
    </plugin>
</plugins>

3.修改FurnController.java, 增加分页查询处理

/**
 * 分页请求接口
 *
 * @param pageNum:  要显示第几页, 默认为1
 * @param pageSize: 每页要显示几条记录, 默认为5
 * @return
 */
@RequestMapping("/furnsByPage")
@ResponseBody
public Msg listFurnsByPage(@RequestParam(defaultValue = "1") Integer pageNum,
                           @RequestParam(defaultValue = "5") Integer pageSize) {
    //设置分页参数
    //解读
    //1.调用findAll完成查询, 底层会进行物理分页, 而不是逻辑分页
    //2.会根据分页参数来计算 limit ?, ?, 在发出sql语句时, 会带limit
    //3.我们后面会给大家抓取SQL
    PageHelper.startPage(pageNum, pageSize);

    List<Furn> furns = furnService.findAll();

    //将分页查询的结果, 封装到PageInfo
    //PageInfo 对象包含了分页的各个信息, 比如当前页面pageNum, 共有多少记录
    PageInfo pageInfo = new PageInfo(furns, pageSize);

    //将pageInfo封装到Msg对象, 返回
    return Msg.success().add("pageInfo", pageInfo);
}

4.使用Postman进行测试, 看看分页查询是否OK
在这里插入图片描述

数据包含在了list属性里

在这里插入图片描述在这里插入图片描述

5.修改HomeView.vue, 完成分页导航显示, 分页请求. 给标签属性绑定值

1)添加分页导航控件

<div style="margin: 10px 0px">
  <el-pagination
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
      v-bind:current-page="currentPage"
      v-bind:page-sizes="[5, 10]"
      v-bind:page-size="pageSize"
      layout="total, sizes, prev, pager, next, jumper"
      v-bind:total="total">
  </el-pagination>
</div>

2)增加分页初始化数据

data() {
  return {
    //增加分页相应的数据绑定
    currentPage: 1,//当前页
    pageSize: 5,//每页显示记录数
    total: 10,//共有多少记录
  }
}

3)修改list方法, 换成分页请求数据的接口

list() {
  //请求分页的接口
  request.get("/api/furnsByPage", {
    params: {//指定请求携带的参数
      pageNum: this.currentPage,
      pageSize: this.pageSize,
    }
  }).then(res => {//处理返回的分页信息
    this.tableData = res.extend.pageInfo.list;
    this.total = res.extend.pageInfo.total;
  })
},

4)处理当前页变化, 比如点击分页链接, 或者go to 第几页

handleCurrentChange(pageNum) {//处理分页请求
  //当用户点击分页超链接时, 会携带pageNum
  // console.log("pageNum=", pageNum);
  this.currentPage = pageNum;
  //发出请求
  this.list();
},

5)处理每页显示多少条记录变化

handleSizeChange(pageSize) {
  this.pageSize = pageSize;
  //发出请求
  this.list();
},

完成测试

在这里插入图片描述

实现功能08-带条件查询分页显示列表

需求分析/图解

在这里插入图片描述

思路分析

1.完成后台代码从 dao ->service -> controller, 并对每层代码进行测试

2.完成前台代码, 使用axios发送http请求, 完成带条件查询分页显示

代码实现

1.修改FurnService.javaFurnServiceImpl.java, 增加条件查询

//根据家居名查询家居信息
public List<Furn> findByCondition(String name);
@Override
public List<Furn> findByCondition(String name) {
    FurnExample furnExample = new FurnExample();
    //通过criteria 对象可以设置查询条件
    FurnExample.Criteria criteria = furnExample.createCriteria();

    //判断name是否有具体的内容
    if (StringUtils.hasText(name)) {
        criteria.andNameLike("%" + name + "%");
    }
    //说明: 如果没有传值, 即为null, "", "   "时, 依然是查询所有的记录
    return furnMapper.selectByExample(furnExample);
}

2.修改FurnServiceTest.java, 测试findByCondition方法.

@Test
public void findByCondition() {
    List<Furn> furns = furnService.findByCondition("风格");
    for (Furn furn : furns) {
        System.out.println("furn--" + furn);
    }
}

3.修改FurnController.java, 处理带条件分页查询, 并使用Postman完成测试.

/**
 * 根据家居名进行分页查询-带条件
 *
 * @param pageNum
 * @param pageSize
 * @return
 */
@RequestMapping("/furnsByConditionPage")
@ResponseBody
public Msg listFurnsByCondition(@RequestParam(defaultValue = "1") Integer pageNum,
                                @RequestParam(defaultValue = "5") Integer pageSize,
                                @RequestParam(defaultValue = "") String search) {
    //设置分页参数
    //解读
    //1.调用findAll完成查询, 底层会进行物理分页, 而不是逻辑分页
    //2.会根据分页参数来计算 limit ?, ?, 在发出sql语句时, 会带limit
    //3.我们后面会给大家抓取SQL
    PageHelper.startPage(pageNum, pageSize);

    List<Furn> furns = furnService.findByCondition(search);

    //将分页查询的结果, 封装到PageInfo
    //PageInfo 对象包含了分页的各个信息, 比如当前页面pageNum, 共有多少记录
    PageInfo pageInfo = new PageInfo(furns, pageSize);

    //将pageInfo封装到Msg对象, 返回
    return Msg.success().add("pageInfo", pageInfo);
}

在这里插入图片描述

4.修改HomeView.vue

<!--margin: 顶部距离 左侧距离-->
<div style="margin: 10px 5px">
  <el-input v-model="search" style="width: 20%" placeholder="请输入家居名"/>
  <el-button style="margin: 10px" type="primary" @click="list">检索</el-button>
</div>

数据池

data() {
  return {
    search: '',//检索条件, 可以在进行分页时保留上次的检索条件
  }
},

list方法

list() {
  //请求分页的接口-带检索条件
  request.get("/api/furnsByConditionPage", {
    params: {//指定请求携带的参数
      pageNum: this.currentPage,
      pageSize: this.pageSize,
      search: this.search,
    }
  }).then(res => {//处理返回的分页信息
    this.tableData = res.extend.pageInfo.list;
    this.total = res.extend.pageInfo.total;
  })
},

5.测试
在这里插入图片描述

实现功能09-添加家居表单前端校验

需求分析/图解

在这里插入图片描述

在这里插入图片描述

说明: 参考 element-plus 表单验证

思路分析

1.完成前台代码, 使用ElementPlus的表单 rules 验证即可

2.参考element-plus 表单验证文档

代码实现

1.修改HomeView.vue, 增加表单验证处理代码. 验证数字
增加对表单各个字段的校验规则

data() {
  return {
    //定义添加表单校验规则
    rules: {
      name: [
        //这里我们可以写多个针对name属性的校验规则
        {required: true, message: "请输入家居名", trigger: "blur"}
      ],
      maker: [
        //这里我们可以写多个针对maker属性的校验规则
        {required: true, message: "请输入厂商", trigger: "blur"}
      ],
      price: [
        //这里我们可以写多个针对price属性的校验规则
        {required: true, message: "请输入价格", trigger: "blur"},
        //使用正则表达式对输入的数据进行校验
        {pattern: /^([1-9]\d*|0)(\.\d+)?$/, message: "请输入数字", trigger: "blur"}
      ],
      sales: [
        //这里我们可以写多个针对sales属性的校验规则
        {required: true, message: "请输入销量", trigger: "blur"},
        {pattern: /^([1-9]\d*|0)$/, message: "请输入数字", trigger: "blur"}
      ],
      stock: [
        //这里我们可以写多个针对stock属性的校验规则
        {required: true, message: "请输入库存", trigger: "blur"},
        {pattern: /^([1-9]\d*|0)$/, message: "请输入数字", trigger: "blur"}
      ],
    }
  }
},

指定将创建的规则引用到form表单, 注意名称要对应
在这里插入图片描述

2.测试, 就可以看到验证规则生效了. 是光标离开输出框时, 出现检验效果, 因为是trigger: "blur"事件, 但是用户提交还是能成.

3.修改HomeView.vue, 但表单验证不通过时, 不提交表单
修改save方法

save() {//将填写的表单数据,发送给后端
  //修改和添加时走的同一个方法
  if (this.form.id) {//表示修改
    //本质发出ajax请求-异步处理
    //...
  } else {//表示添加
    //表单验证是否通过
    this.$refs['form'].validate(valid => {
      //valid就是表单校验后返回的结果
      if (valid) {//如果校验通过
        //解读
        //1.url: http://localhost:8080/ssm/save
        //2.this.form: 携带的数据
        request.post("/api/save", this.form).then(res => {
          // console.log("res=", res);
          //关闭对话框
          this.dialogVisible = false;
          //调用list方法, 刷新数据
          this.list();
        });
      } else {//校验没有通过
        this.$message({
          type: "error",
          message: "表单校验失败, 不提交"
        })
        return false;//放弃提交
      }
    })
  }
  //这里有一个注意事项...
},

修改add方法

add() {//显示添加对话框-带表单
  //显示对话框
  this.dialogVisible = true;
  //情况添加表单数据
  this.form = {};
  //清空上次校验的信息
  this.$refs['form'].resetFields();
},

在这里插入图片描述

实现功能10-添加家居表单后端校验

需求分析/图解

1.为什么前端校验了, 后端还需要校验? -使用Postman添加数据, 打破前端校验机制
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

2.后端校验-需求分析, 但后端校验没有通过, 会出现灰色框提示, 后台不真正入库数据在这里插入图片描述

思路分析

1.后台 使用JSR303数据校验, 引入hibernate-validator.jar, 学习SpringMVC JSR303校验时遇到过.

2.前端 使用ElementPlus进行数据绑定, 并显示错误信息

代码实现

1.修改pom.xml, 引入hibernate-validator jar文件

<!--JSR303数据校验支持引入hibernate-validator-->
<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-validator</artifactId>
  <version>6.1.1.Final</version>
</dependency>

2.修改Furn.java, 使用hibernate-validator

@NotEmpty(message = "请输入家居名")
private String name;

@NotEmpty(message = "请输入厂商")
private String maker;

@NotNull(message = "请输入数字")
@Range(min = 0, message = "价格不能小于0")
private BigDecimal price;

@NotNull(message = "请输入数字")
@Range(min = 0, message = "销量不能小于0")
private Integer sales;

@NotNull(message = "请输入数字")
@Range(min = 0, message = "库存不能小于0")
private Integer stock;

3.修改FurnController.java, 处理带条件分页查询, 并使用Postman完成测试.

@PostMapping("/save")
@ResponseBody
public Msg save(@Validated @RequestBody Furn furn, Errors errors) {
    Map<String, Object> map = new HashMap<>();

    List<FieldError> fieldErrors = errors.getFieldErrors();

    for (FieldError fieldError : fieldErrors) {
        map.put(fieldError.getField(), fieldError.getDefaultMessage());
    }

    if (map.isEmpty()) {//说明后端校验通过, 因为没有发现校验错误
        furnService.save(furn);
        //没有抛出异常, 就返回成功信息
        Msg success = Msg.success();
        return success;
    } else {
        //校验失败, 就把错误信息封装到Msg对象, 并返回
        return Msg.fail().add("errors", map);
    }
}

在这里插入图片描述在这里插入图片描述在这里插入图片描述
4.修改HomeView.vue, 显示服务器校验返回的提示信息
在数据池, 增加显示错误信息的变量

data() {
  return {
    //存放后端校验的错误信息
    serverValidErrors: {},
  }
},

修改save方法, 显示错误提示

if (valid) {//如果校验通过
  //解读
  //1.url: http://localhost:8080/ssm/save
  //2.this.form: 携带的数据
  request.post("/api/save", this.form).then(res => {
    console.log("res=", res);
    if (res.code === 200) {//添加成功
      //关闭对话框
      this.dialogVisible = false;
      //调用list方法, 刷新数据
      this.list();
    } else {//后端校验失败
      //取出校验失败的信息, 赋给serverValidErrors
        this.serverValidErrors.name = res.extend.errors.name;
        this.serverValidErrors.maker = res.extend.errors.maker;
        this.serverValidErrors.price = res.extend.errors.price;
        this.serverValidErrors.sales = res.extend.errors.sales;
        this.serverValidErrors.stock = res.extend.errors.stock;
    }
  });
}

修改对话框, 显示后台返回的校验错误信息

<el-form ref="form" :model="form" :rules="rules" label-width="120px" style="width: 80%">
  <el-form-item label="家居名" prop="name">
    <el-input v-model="form.name" style="width: 50%"/>
    {{serverValidErrors.name}}
  </el-form-item>
  <el-form-item label="厂商" prop="maker">
    <el-input v-model="form.maker" style="width: 50%"/>
    {{serverValidErrors.maker}}
  </el-form-item>
  <el-form-item label="价格" prop="price">
    <el-input v-model="form.price" style="width: 50%"/>
    {{serverValidErrors.price}}
  </el-form-item>
  <el-form-item label="销量" prop="sales">
    <el-input v-model="form.sales" style="width: 50%"/>
    {{serverValidErrors.sales}}
  </el-form-item>
  <el-form-item label="库存" prop="stock">
    <el-input v-model="form.stock" style="width: 50%"/>
    {{serverValidErrors.stock}}
  </el-form-item>
</el-form>

为了触发后端校验, 先把前端校验解除

} else {//表示添加
  //表单验证是否通过
  this.$refs['form'].validate(valid => {
    //这里我们让前端校验放行, 测试后端校验的效果, 测试完毕, 再改回来
    valid = true;
    //valid就是表单校验后返回的结果
    if (valid) {//如果校验通过

测试
在这里插入图片描述

修改add()方法, 清空错误信息

add() {//显示添加对话框-带表单
  //显示对话框
  this.dialogVisible = true;
  //情况添加表单数据
  this.form = {};
  //清空上次前端校验的信息
  this.$refs['form'].resetFields();
  //清空上次后端校验的信息
  this.serverValidErrors = {};
},

SSM项目[前后端分离]小结+作业要求

●说明: 前后端分离开发, 前端框架Vue + 后端框架SSM

1.前端框架Vue

2.后端框架-SSM (Spring + SpringMVC + MyBatis)

3.数据库-MySQL

4.项目的依赖管理-Maven

5.分页-pagehelper

6.逆向工程-MyBatis Generator

7.其它…


●前端框架Vue
1.使用了ElementPlus来展示数据
2.使用Axios对象来请求数据 / 接口

●后端框架SSM
1.使用了经典的三层结构
2.使用MyBatis Generator 和 MyBatis pageHelper

●作业
1.把我们写的项目. 小伙伴可以独立地完整地写出来.
2.一定要自己写, 培养自己独立解决问题的能力, 并且提高解决Bug能力
3.逐步形成自己的编程套路 / 思路.
4.前端这块可以展示就可以了, 不需要写的非常好看, 关键是梳理清楚前后端数据通信机制. 多写, 多总结, 多梳理, 形成自己的知识.


在这里插入图片描述
🔜 下一讲预告 🔜
敬请期待:MyBatis系列一: MyBatis初步入门


📚 目录导航 📚

  1. SSM整合-前后端分离(项目环境搭建)
  2. SSM项目-前后端分离(搭建Vue前端工程)
  3. SSM整合-前后端分离(实现增删改查)
  4. SSM整合-前后端分离(实现分页+前后端校验)

💬 读者互动 💬
你在学习SSM分页和校验功能时遇到了哪些问题?欢迎在评论区留言,我们一起讨论。


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

精准测试与传统的手工测试

大部分测试从业人员都经历了手工测试到自动化测试递进&#xff0c;测试技术及思路都发生了日新月异的变化&#xff0c;有些中厂及大厂都有一套强大且复杂的自动化测试用例时刻保障产品的稳定性及正确性。 所谓精准测试&#xff0c;就是借助一定的技术手段、通过算法的辅助对传…

虚拟机拖拽文档造成缓存过大

查看文件夹大小&#xff1a;du -h --max-depth1 缓存位置&#xff1a;~/.cache/vmware/drag_and_drop 删除&#xff1a;rm -fr ~/.cache/vmware/drag_and_drop 释放了3GB

解决Few-shot问题的两大方法:元学习与微调

基于元学习&#xff08;Meta-Learning&#xff09;的方法&#xff1a; Few-shot问题或称为Few-shot学习是希望能通过少量的标注数据实现对图像的分类&#xff0c;是元学习(Meta-Learning)的一种。 Few-shot学习&#xff0c;不是为了学习、识别训练集上的数据&#xff0c;泛化…

深入理解前端缓存

前端缓存是所有前端程序员在成长历程中必须要面临的问题&#xff0c;它会让我们的项目得到非常大的优化提升&#xff0c;同样也会带来一些其它方面的困扰。大部分前端程序员也了解一些缓存相关的知识&#xff0c;比如&#xff1a;强缓存、协商缓存、cookie等&#xff0c;但是我…

后端程序员的Linux命令指南

后端程序员的终极命令指南&#xff1a;考考自己是不是真正掌握Linux的使用 欢迎各位穿着格子衬衫&#xff0c;常年抱着键盘睡觉的后端小伙伴们&#x1f44b;&#x1f44b;&#x1f44b;&#xff01;今天&#xff0c;考考你们是不是掌握以下让你们在日后在服务器上叱咤风云的命令…

vscode颜色没有显示出来颜色预览效果,安装插件解决

1、先上一张图&#xff0c;看看之前没有安装插件的Html颜色的色块 2、安装插件Color Highlight 这样颜色对应的效果就出来了。

O2OA的数据库数据库配置-使用不同用户访问Oracle时报错-表或视图不存在

在使用Oracle数据库时&#xff0c;多个O2OA服务器同一个Oracle实例中使用不同的用户启动时&#xff0c;可能会遇到数据库访问的错误。本篇阐述此类问题以及解决方案。 一、先决条件&#xff1a; 1、O2OA已经下载并且解压到指定的目录&#xff1b; 2、Oracle数据库已经完成安…

同时使用磁吸充电器和Lightning时,iPhone充电速度会变快吗?

在智能手机的世界里&#xff0c;续航能力一直是用户关注的焦点。苹果公司以其创新的MagSafe技术和传统的Lightning接口&#xff0c;为iPhone用户提供了多样化的充电解决方案。 然而&#xff0c;当这两种技术同时使用时&#xff0c;它们能否带来更快的充电速度&#xff1f;本文…

“用友审批+民生付款”,YonSuite让企业发薪更准时

随着现代企业经营模式的不断创新和市场竞争的加剧&#xff0c;企业薪资管理和发放的效率、准确性和及时性已成为企业管理的重要一环。然而&#xff0c;在实际操作中&#xff0c;许多企业面临着薪资管理复杂、发放流程繁琐、数据不准确等难点和痛点。为了解决这些问题&#xff0…

【Java】已解决java.net.UnknownHostException异常

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决java.net.UnknownHostException异常 在Java的网络编程中&#xff0c;java.net.UnknownHostException是一个常见的异常&#xff0c;它通常表明在尝试解析主机名时出现了问题。…

全网首测!文生软件平台码上飞CodeFlying,效果炸裂!

前言&#xff1a; 提到AIGC&#xff0c;在大家的印象中应该就是让AI自己生成文字&#xff0c;图片等内容吧。随着今年Sora&#xff0c;Suno的爆火&#xff0c;将AIGC的应用场景又拉到了一个新的高度&#xff0c;为人们带来了更多的遐想。在未来&#xff0c;或许可以用AI来生成…

人声分离的5个方法分享,从入门到精通,伴奏提取手拿把捏!

人声分离通常是音乐制作、混音和卡拉OK中常用的重要技术之一。它的核心是将乐器伴奏从原始音轨中分离出来&#xff0c;使得用户可以单独处理或重混音频&#xff0c;创造出清晰干净的伴奏轨道。若缺乏强大的音频剪辑软件或专业人声分离工具&#xff0c;这一过程往往会比较困难。…

车辆轨迹预测系列 (二):常见数据集介绍

车辆轨迹预测系列 (二)&#xff1a;常见数据集介绍 文章目录 车辆轨迹预测系列 (二)&#xff1a;常见数据集介绍1、NuScenes (2020)&#xff1a;1、下载2、说明 2、Waymo Open Dataset (2020)&#xff1a;1、介绍2、概述3、下载4、教程5、参考 3、Lyft Level 5 (2020)&#xff…

智慧办公新篇章:可视化技术引领园区管理革命

随着科技的飞速发展&#xff0c;办公方式也在经历着前所未有的变革。在这个信息爆炸的时代&#xff0c;如何高效、智能地管理办公空间&#xff0c;成为了每个企业和园区管理者面临的重要课题。 智慧办公园区作为未来办公的新趋势&#xff0c;以其高效、便捷、智能的特点&#x…

鸿蒙NEXT实战开发: 依据前端对http请求进行二次简单封装

一、为什么要对http请求进行封装&#xff1f; 在我看来二次封装有一下几点好处 代码封装之后&#xff0c;开发人员只用关注业务层面的东西&#xff0c;不用去过多浪费时间在接口请求数据处理上。封装之后代码更加简洁&#xff0c;通俗易懂&#xff0c;方便后期维护&#xff0…

数据库讲解---(数据库保护)【上】

目录 一.事务 1.1事务的概念【重要】 1.2事务的特性【重要】 1.2.1原子性(Atomicity) 1.2.2一致性(Consistency) 1.2.3隔离性(Isolation) 1.2.4持久性(Durability) 二.数据库恢复 2.1数据库系统的故障 2.1.1事务内部故障 2.1.2系统故障 2.1.3介质故障 2.1.4计算机…

甘肃的千层烤馍:传统面点的魅力绽放

千层烤馍&#xff0c;作为甘肃美食文化的重要象征&#xff0c;以其独特的外形和丰富的口感&#xff0c;吸引着众多食客。它的外观犹如一件精美的艺术品&#xff0c;层层叠叠&#xff0c;金黄酥脆&#xff0c;散发着诱人的香气。 在甘肃平凉地区制作千层烤馍&#xff0c…

详解|什么样的SSL证书能助力企业通过等保与密评?

企业在过等级保护&#xff08;简称“等保”&#xff09;与密码评测&#xff08;简称“密评”&#xff09;的时候&#xff0c;SSL证书作为网络安全的基础组件之一&#xff0c;其选择与部署对于企业顺利通过等保测评与密评至关重要。那什么样的SSL证书能够有效助力企业达成这一目…

gbase8s之Encoding or code set not supported

如图发生以下错误&#xff1a; 解决办法&#xff1a;在url里加上ifx_use_strenctrue 就可以了 参数解释&#xff1a;

镜像发布至dockerHub

1、login 没有账号的话去注册一个 https://hub.docker.com docker login 输入账号密码和账号2、修改镜像名格式 可以直接招我的修改 格式为你的 hub名/镜像名 3、推送