返回分类信息(带层级)

文章目录

    • 1.前端展示分类管理信息
        • 1.目前项目架构
        • 2.启动前后端项目
          • 1.启动mysql容器
          • 2.启动后端 renren-fast
          • 3.启动前端
            • 1.界面
            • 2.用户名密码都是admin
        • 3.创建分类管理菜单
          • 1.菜单管理 -> 新增 -> 新增目录
          • 2.刷新
          • 3.能够新增菜单的原因是前端脚手架与renren-fast后端脚手架通信,这个菜单的表是 sys_menu
          • 4.新增分类管理菜单
          • 5.关于这个分类管理的路由解析
            • 1.由于设置的菜单路由是commodity/category,所以点击这个菜单就会查找前端项目的renren-fast-vue\src\views\modules\commodity\category.vue
            • 2.一般这个菜单路由是对应于后端的一个controller的前缀
            • 3.而后端controller的前缀是根据表来自动生成的
            • 4.总结:代码生成器会根据一个表来生成一个controller,一个前端菜单界面
          • 6.将生成的commodity文件夹下面的两个文件放到前端项目的modules下
          • 7.分析category.vue
            • 1.找到向后端发送请求的位置
            • 2.进入adornUrl
            • 3.进入baseUrl
            • 4.浏览器测试请求一下
            • 5.注销掉这个url,自己写一个
            • 6.启动后端的sunliving-commodity模块
            • 7.再次点击分类管理菜单,发现出现跨域错误
          • 8.跨域问题解决
            • 1.复制renren-fast模块的src/main/java/io/renren/config/CorsConfig.java
            • 2.粘贴到sunliving-commodity模块下
            • 3.重启后端sunliving-commodity
            • 4.再次点击分类管理
    • 2.使用树形菜单展示分类(初级)
        • 1.思路分析
        • 2.首先返回所有记录(没有层级)
          • 1.com/sun/sunliving/commodity/service/CategoryService.java 新增方法
          • 2.com/sun/sunliving/commodity/service/impl/CategoryServiceImpl.java 新增方法和属性
          • 3.com/sun/sunliving/commodity/controller/CategoryController.java 新增方法
          • 4.postman测试 http://localhost:9091/commodity/category/list/tree
        • 3.关于com/sun/common/utils/R.java 工具类的解析
        • 4.com/sun/sunliving/commodity/entity/CategoryEntity.java 新增字段
    • 3.流式计算streamAPI
        • 1.基本介绍
        • 2.环境搭建
        • 3.filter 过滤
          • 1.过滤,只要集合中id大于2的
          • 2.结果
          • 3.分析
        • 4.map 映射
          • 1.映射,将person过滤出的节点的cat属性赋值
          • 2.结果
          • 3.分析
        • 5.sorted 排序
          • 1.排序,按照person节点的id降序排列
          • 2.结果
          • 3.分析
        • 6.常用api
          • 1.limt 过滤前两个节点然后遍历输出
          • 2.count 统计节点个数
    • 4.完成后端返回带层级的记录
        • 1.com/sun/sunliving/commodity/service/impl/CategoryServiceImpl.java 修改listTree方法
        • 2.com/sun/sunliving/commodity/service/impl/CategoryServiceImpl.java 新增方法,获取节点的所有子节点
        • 3.启动项目完成测试
          • 1.启动mysql容器
          • 2.启动前端
          • 3.启动后端renren-fast和sunliving-commodity
          • 4.启动renren-fast报错数据库连接失败
          • 5.由于代码根本没改,所以判断是数据库的问题,查了一下ip原来是101,结果变成100了
          • 6.修改一下连接url即可
          • 7.postman测试 http://localhost:9091/commodity/category/list/tree
          • 8.提交代码
    • 5.前端展示分类信息
        • 1.集成树形控件
          • 1.进入 Element-ui [树形控件](https://element.eleme.cn/#/zh-CN/component/tree)
          • 2.首先将category.vue备份,然后新创建一个
          • 3.将第一行复制到模板位置
          • 4.将其余的复制到script位置
          • 5.打开前端页面查看
        • 2.根据返回数据修改category.vue
        • 3.前端查看效果

1.前端展示分类管理信息

1.目前项目架构

image-20240409194234179

2.启动前后端项目
1.启动mysql容器

image-20240409195159308

2.启动后端 renren-fast

image-20240409195142084

3.启动前端
1.界面

image-20240409195316185

2.用户名密码都是admin
3.创建分类管理菜单
1.菜单管理 -> 新增 -> 新增目录

image-20240409195934957

2.刷新

image-20240409200027158

3.能够新增菜单的原因是前端脚手架与renren-fast后端脚手架通信,这个菜单的表是 sys_menu

image-20240409200813608

4.新增分类管理菜单

image-20240409201722422

image-20240409201745986

5.关于这个分类管理的路由解析
1.由于设置的菜单路由是commodity/category,所以点击这个菜单就会查找前端项目的renren-fast-vue\src\views\modules\commodity\category.vue
2.一般这个菜单路由是对应于后端的一个controller的前缀
3.而后端controller的前缀是根据表来自动生成的

比如表是commodity_category就会生成commodity/category

4.总结:代码生成器会根据一个表来生成一个controller,一个前端菜单界面

image-20240409210710023

6.将生成的commodity文件夹下面的两个文件放到前端项目的modules下

image-20240409213158099

7.分析category.vue
1.找到向后端发送请求的位置

image-20240410112840231

2.进入adornUrl
  • 目前肯定是开发环境,经过全局搜索,发现没有开启代理,所以走的是window.SITE_CONFIG.baseUrl

image-20240410113554678

image-20240410115537994

3.进入baseUrl
  • 可以查看到baseUrl是http://localhost:8080/renren-fast

image-20240410115654166

image-20240410115746397

4.浏览器测试请求一下
  • 完全匹配

image-20240410115832357

image-20240410115857616

5.注销掉这个url,自己写一个
  • 请求sunliving-commodity的服务端口在9091,来展示数据

image-20240410120209410

6.启动后端的sunliving-commodity模块

image-20240410120407070

7.再次点击分类管理菜单,发现出现跨域错误

image-20240410120445112

8.跨域问题解决
1.复制renren-fast模块的src/main/java/io/renren/config/CorsConfig.java

image-20240410132008917

2.粘贴到sunliving-commodity模块下
3.重启后端sunliving-commodity

image-20240410132328344

4.再次点击分类管理

image-20240410132551777

2.使用树形菜单展示分类(初级)

1.思路分析

image-20240410133930594

2.首先返回所有记录(没有层级)
1.com/sun/sunliving/commodity/service/CategoryService.java 新增方法
    /*** 查询所有分类及其子分类,以树形结构组装** @return*/List<CategoryEntity> listTree();
2.com/sun/sunliving/commodity/service/impl/CategoryServiceImpl.java 新增方法和属性
    @Resourceprivate CategoryDao categoryDao; // 注入 CategoryDao的代理对象@Overridepublic List<CategoryEntity> listTree() {// 先查询所有记录List<CategoryEntity> categoryEntities = categoryDao.selectList(null);return categoryEntities;}
3.com/sun/sunliving/commodity/controller/CategoryController.java 新增方法
    /*** 查询所有分类及其子分类,以树形结构组装** @return*/@RequestMapping("/list/tree")public R listTree(){return R.ok().put("data", categoryService.listTree());}
4.postman测试 http://localhost:9091/commodity/category/list/tree

image-20240410141258328

3.关于com/sun/common/utils/R.java 工具类的解析
/*** Copyright (c) 2016-2019 人人开源 All rights reserved.* <p>* https://www.renren.io* <p>* 版权所有,侵权必究!*/package com.sun.common.utils;import org.apache.http.HttpStatus;import java.util.HashMap;
import java.util.Map;/*** 返回数据** @author Mark sunlightcs@gmail.com*/
public class R extends HashMap<String, Object> {private static final long serialVersionUID = 1L;/*** 无参构造方法,初始化 code 为 0,msg 为 success*/public R() {put("code", 0);put("msg", "success");}/*** 返回一个错误的 R 对象* @return 返回一个code:500, msg:未知异常,请联系管理员的R对象*/public static R error() {return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, "未知异常,请联系管理员");}/*** 返回一个错误的 R 对象* @param msg* @return 返回一个code:500, msg:msg的R对象*/public static R error(String msg) {return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, msg);}/*** 返回一个错误的 R 对象* @param code 错误码* @param msg 错误信息* @return 返回一个code:code, msg:msg的R对象*/public static R error(int code, String msg) {R r = new R();r.put("code", code);r.put("msg", msg);return r;}/*** 返回一个正确的 R 对象* @param msg 错误信息* @return 返回一个code:code, msg:msg的R对象*/public static R ok(String msg) {R r = new R();r.put("msg", msg);return r;}/*** 返回一个正确的 R 对象* @param map* @return 返回一个code:0, msg:success的R对象*/public static R ok(Map<String, Object> map) {R r = new R();r.putAll(map);return r;}/*** 返回一个正确的 R 对象* @return 返回一个code:0, msg:success的R对象*/public static R ok() {return new R();}/*** 重写 put 方法,给父类的HashMap来赋值,然后返回自身对象,方便链式调用,* 简称父类key-value赋值,return this* @param key* @param value* @return*/@Overridepublic R put(String key, Object value) {super.put(key, value);return this;}
}
4.com/sun/sunliving/commodity/entity/CategoryEntity.java 新增字段
  • 新增一个字段,表示每条记录后面都跟着多条子记录
	/*** 每一条记录后都有一些子记录*/@TableField(exist = false) // 表示数据库中没有这个字段private List<CategoryEntity> childrenCategories;

3.流式计算streamAPI

1.基本介绍

image-20240410144813510

2.环境搭建
package com.sun.streamAPI;import java.util.Arrays;
import java.util.List;/*** Description:** @Author sun* @Create 2024/4/10 15:27* @Version 1.0*/
public class testStream {public static void main(String[] args) {// 创建几个person对象Person person1 = new Person(1, "张三", 18);Person person2 = new Person(2, "李四", 19);Person person3 = new Person(3, "王五", 20);Person person4 = new Person(4, "赵六", 21);Person person5 = new Person(5, "孙七", 22);// 将其放到集合中List<Person> personList = Arrays.asList(person1, person2, person3, person4, person5);// 输出for (Person person : personList) {System.out.println(person);}}
}
class Cat {private Integer id;private String name;private String color;public Cat(Integer id, String name, String color) {this.id = id;this.name = name;this.color = color;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getColor() {return color;}public void setColor(String color) {this.color = color;}@Overridepublic String toString() {return "Cat{" +"id=" + id +", name='" + name + '\'' +", color='" + color + '\'' +'}';}
}
class Person {private Integer id;private String name;private Integer age;private Cat cat;public Person(Integer id, String name, Integer age) {this.id = id;this.name = name;this.age = age;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Cat getCat() {return cat;}public void setCat(Cat cat) {this.cat = cat;}@Overridepublic String toString() {return "Person{" +"id=" + id +", name='" + name + '\'' +", age=" + age +", cat=" + cat +'}';}
}

image-20240410153833731

3.filter 过滤
1.过滤,只要集合中id大于2的
        // 过滤,只要集合中id大于2的节点List<Person> collect = personList.stream().filter(person -> {return person.getId() > 2;}).collect(Collectors.toList());System.out.println(collect);
2.结果

image-20240410155317070

3.分析
  • 首先使用personList.stream()将list转换成流对象
  • 然后调用filter()方法进行过滤
  • 使用person -> {过滤条件},其中person为需要过滤的节点
  • 使用return person.getId() > 2 作为过滤条件,意为只要person节点大于2的
  • 最后调用collect(Collectors.toList())方法,将过滤后的结果收集到一个新的集合中
  • 注意:只有过滤操作时原来的list不发生变化
4.map 映射
1.映射,将person过滤出的节点的cat属性赋值
        // 过滤,只要集合中id大于2的节点List<Person> collect = personList.stream().filter(person -> {return person.getId() > 2;}).map(person -> {// 映射一下,将person过滤出的节点的cat属性赋值// 1.创建cat节点Cat cat = new Cat(person.getId() + 100, "cat", "red");// 2.为person节点设置cat属性person.setCat(cat);// 3.返回处理后的person节点return person;}).collect(Collectors.toList());System.out.println("处理后的:list => " + collect);System.out.println("处理前的:list => " + personList);
2.结果

image-20240410161447693

3.分析
  • 在过滤的基础上调用map(person -> {映射逻辑})方法对过滤后的person节点进行处理
  • 首先创建了一个Cat节点Cat cat = new Cat(person.getId() + 100, “cat”, “red”)
  • 然后为person节点设置cat属性person.setCat(cat)
  • 最后将映射后的person节点返回return person
  • 继续调用collect(Collectors.toList())将结果收集到一个新的集合中
  • 注意:映射操作后原来的list也会发生变化
5.sorted 排序
1.排序,按照person节点的id降序排列
        // 过滤,只要集合中id大于2的节点List<Person> collect = personList.stream().filter(person -> {return person.getId() > 2;}).map(person -> {// 映射一下,将person过滤出的节点的cat属性赋值// 1.创建cat节点Cat cat = new Cat(person.getId() + 100, "cat", "red");// 2.为person节点设置cat属性person.setCat(cat);// 3.返回处理后的person节点return person;}).sorted((p1, p2) -> {// 按照person节点的id降序排列return p2.getId() - p1.getId();}).collect(Collectors.toList());System.out.println("处理后的:list => " + collect);System.out.println("处理前的:list => " + personList);
2.结果

image-20240410163033414

3.分析
  • 调用 sorted((p1, p2) -> {排序方式}) 进行排序操作
  • return p2.getId() - p1.getId() 表示对节点进行降序排列
  • return p1.getId() - p2.getId() 表示对节点进行升序排列
6.常用api
1.limt 过滤前两个节点然后遍历输出
        // 过滤前两个节点然后遍历输出personList.stream().limit(2).forEach(person -> {System.out.println(person);});

2.count 统计节点个数
  • 注意:如果是filter或者是limit后使用的count,那么统计的就是filter或者是limit后的数量
        // 统计集合的节点个数long count = personList.stream().count();System.out.println("count=" + count);

image-20240410164029384

4.完成后端返回带层级的记录

1.com/sun/sunliving/commodity/service/impl/CategoryServiceImpl.java 修改listTree方法
    @Overridepublic List<CategoryEntity> listTree() {// 先查询所有记录,放到list中List<CategoryEntity> categoryEntities = categoryDao.selectList(null);// 使用streamapi + 递归处理分级菜单List<CategoryEntity> collect = categoryEntities.stream().filter(categoryEntity -> {// 过滤一级菜单return categoryEntity.getParentId() == 0;}).map(categoryEntity -> {// 递归处理分级菜单categoryEntity.setChildrenCategories(getChildrenCategories(categoryEntity, categoryEntities));return categoryEntity;}).sorted((category1, category2) -> {// 按照sort字段进行升序排列return (category1.getSort() == null ? 0 : category1.getSort()) -(category2.getSort() == null ? 0 : category2.getSort());}).collect(Collectors.toList());return collect;}
2.com/sun/sunliving/commodity/service/impl/CategoryServiceImpl.java 新增方法,获取节点的所有子节点
    // 递归获取一个节点的所有子节点public List<CategoryEntity> getChildrenCategories(CategoryEntity root, List<CategoryEntity> all) {List<CategoryEntity> collect = all.stream().filter(categoryEntity -> {// 过滤出一级节点的所有子节点return categoryEntity.getParentId() == root.getId();}).map(categoryEntity -> {// 递归设置每个子节点的子节点categoryEntity.setChildrenCategories(getChildrenCategories(categoryEntity, all));return categoryEntity;}).sorted((category1, category2) -> {// 按照sort字段进行升序排列return (category1.getSort() == null ? 0 : category1.getSort()) -(category2.getSort() == null ? 0 : category2.getSort());}).collect(Collectors.toList());return collect;}
3.启动项目完成测试
1.启动mysql容器

image-20240410210122491

2.启动前端
3.启动后端renren-fast和sunliving-commodity
4.启动renren-fast报错数据库连接失败

image-20240410210322627

5.由于代码根本没改,所以判断是数据库的问题,查了一下ip原来是101,结果变成100了

image-20240410210431683

6.修改一下连接url即可
7.postman测试 http://localhost:9091/commodity/category/list/tree

image-20240410210845276

8.提交代码

image-20240410215203011

5.前端展示分类信息

1.集成树形控件
1.进入 Element-ui 树形控件

image-20240410212840796

2.首先将category.vue备份,然后新创建一个

image-20240410213049292

3.将第一行复制到模板位置

image-20240410213127929

image-20240410213146805

4.将其余的复制到script位置

image-20240410213226022

5.打开前端页面查看

image-20240410213808569

2.根据返回数据修改category.vue
<template><el-tree :data="data" :props="defaultProps" @node-click="handleNodeClick"></el-tree>
</template><script>
export default {data() {return {data: '',defaultProps: {children: 'childrenCategories',label: 'name'}};},methods: {handleNodeClick(data) {console.log(data);},// 获取分类列表(带层级)getCategories() {this.$http({url: 'http://localhost:9091/commodity/category/list/tree',method: 'get'}).then(({data}) => { // 解构了datathis.data = data.data;})}},created() { // 生命周期钩子,初始化时调用this.getCategories()}
};
</script><style scoped></style>
3.前端查看效果

image-20240411102607802

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

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

相关文章

Linux基础之僵尸进程与孤儿进程

目录 一、僵尸进程 1.1 什么是僵尸进程 1.2 为什么要有僵尸状态 1.3 观察我们的僵尸状态 1.4 关于僵尸进程的小Tip 二、孤儿进程 2.1 什么是孤儿进程 一、僵尸进程 1.1 什么是僵尸进程 在上一篇文章中&#xff0c;我们有提到过进程的死亡状态的概念&#xff0c;而我们的…

国内智能搜索工具实战教程

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

c++AVL树的模拟实现

前面对map/multimap/set/multiset进行了简单的介绍&#xff0c;在其文档介绍中发现&#xff0c;这几个容器有个 共同点是&#xff1a;其底层都是按照二叉搜索树来实现的&#xff0c;但是二叉搜索树有其自身的缺陷&#xff0c;假如往树中 插入的元素有序或者接近有序&#xff0c…

k8s 二进制安装 优化架构之 部署负载均衡,加入master02

目录 一 实验环境 二 部署 CoreDNS 1&#xff0c;所有node加载coredns.tar 镜像 2&#xff0c;在 master01 节点部署 CoreDNS 3&#xff0c; DNS 解析测试 4&#xff0c; 报错分析 5&#xff0c;重新 DNS 解析测试 三 master02 节点部署 1&#xff0…

什么是最大路径?什么是极大路径?

最近学习中&#xff0c;在这两个概念上出现了混淆&#xff0c;导致了一些误解&#xff0c;在此厘清。 最大路径 在一个简单图G中&#xff0c;u、v之间的距离 d ( u , v ) min ⁡ { u 到 v 的最短路的长度 } d(u,v) \min \{ u到v的最短路的长度 \} d(u,v)min{u到v的最短路的…

Redis 的主从复制

Redis 的主从复制 1、主从复制的实现2、主从复制的同步功能(PSYNC)2.1、部分重同步 本文讲解的Redis 主从复制机制&#xff0c;是基于 2.8及以后的版本而言&#xff0c;2.8以前的版本主从复制机制与此有所不同&#xff0c;请知悉。 Redis的复制功能分为 同步 (psync) 和 命令传…

vm16安装最新版本的ubuntu虚拟机,并安装g++的步骤记录

背景 低版本的ubuntu安装G一直不成功&#xff0c;干脆安装最新版的 官网下载 bing搜索ubuntu 下载完成 vm16新建虚拟机 一直下一步&#xff0c;安装完成 终端输入命令 sudo apt-get update ᅟᅠ       sudo apt install gcc ᅟᅠ      sudo apt install g

【C/C++】设计模式——工厂模式:简单工厂、工厂方法、抽象工厂

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

cdn引入vue的项目嵌入vue组件——http-vue-loader 的使用——技能提升

最近在写MVC的后台&#xff0c;看到全是jq的写法&#xff0c;但是对于用惯了vue的我&#xff0c;真是让我无从下手。。。 vue的双向绑定真的很好用。。。 为了能够在cdn引入的项目中嵌入vue组件&#xff0c;则可以使用http-vue-loader了 步骤1&#xff1a;下载http-vue-loader…

OPC-UA open62541 C++测试代码

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 这是之前写的open62541测试代码…

数据结构------二叉树经典习题1

博主主页: 码农派大星. 关注博主带你了解更多数据结构知识 1判断相同的树 OJ链接 这道题相对简单,运用我们常规的递归写法就能轻松写出 所以我们解题思路应该这样想: 1.如果p为空&#xff0c;q为空&#xff0c;那么就是两颗空树肯定相等 2.如果一个树为空另一棵树不为空那么…

ROS学习笔记(15)小车巡墙驾驶

0.前提 前一章我讲解了拉氏变换和PID&#xff0c;这一章我来讲解一下小车巡墙驾驶的理论和部分代码。 1.前情回顾 1.拉氏变换 拉普拉斯变换是要将时域问题转换成频域问题来处理。 2.PID控制器 转向角&#xff1a; 误差牺牲&#xff1a; 3.具体参看上一篇文章 2.巡墙驾驶…

游戏理解入门:Rust+Bracket开发一个小游戏

1. Game loop 使用game loop可以使得游戏运行更加流畅和顺滑&#xff0c;它可以&#xff1a; 初始化窗口、图形和其他资源&#xff1b;每当屏幕刷新他都会运行(通常是每秒30,60 )&#xff1b;每次通过循环&#xff0c;他都会调用游戏的tick()函数。 大致的原理流程如下&…

STK中的光照计算模型

本文简要阐述STK中光照计算的模型。 在航天任务中&#xff0c;通常需要分析地面站、飞行器在一定时间内的光照情况&#xff0c;具体包括&#xff1a; 地面站处在光照区和阴影区的具体时间范围&#xff1b;考虑地形遮挡后&#xff0c;地面站的光照区和阴影区的变化情况&#x…

MYSQL-9.问题排查

问题排查的思路与方向 问题排查思路 分析问题&#xff1a;根据理论知识经验分析问题&#xff0c;判断问题可能出现的位置或可能引起问题的原因&#xff0c;将目标缩小到一定范围&#xff1b;排查问题&#xff1a;基于上一步的结果&#xff0c;从引发问题的“可疑性”角度出发…

低空经济:无人机竞赛详解

无人机竞赛市场近年来呈现出蓬勃发展的态势&#xff0c;其市场价值不仅体现在竞赛本身&#xff0c;还体现在推动无人机技术创新、拓展应用场景以及促进产业链发展等多个方面。 一、比赛项目介绍 无人机竞赛通常分为多个项目&#xff0c;包括竞速赛、技巧赛、航拍赛等。每个项目…

新手也能看懂的前端单元测试框架:Vitest

单元测试的概念及作用 1.什么是单元测试&#xff1f; 单元测试是测试中的一个重要环节&#xff0c;它针对软件中的最小可测试单元进行验证&#xff0c;通常是指对代码中的单个函数、方法或模块进行测试。 单元测试旨在确定特定部分代码的行为是否符合预期&#xff0c;通过针…

【谷粒商城】01-环境准备

1.下载和安装VirtualBox 地址&#xff1a;https://www.virtualbox.org/wiki/Downloads 傻瓜式安装VirtualBox 2.下载和安装Vagrant官方镜像 地址&#xff1a;https://app.vagrantup.com/boxes/search 傻瓜式安装 验证是否安装成功 打开CMD,输入vagrant命令&#xff0c;是否…

Linux的常用指令 和 基础知识穿插巩固(巩固知识必看)

目录 前言 ls ls 扩展知识 ls -l ls -a ls -al cd cd 目录名 cd .. cd ~ cd - pwd 扩展知识 路径 / cp [选项] “源文件名” “目标文件名” mv [选项] “源文件名” “目标文件名” rm 作用 用法 ./"可执行程序名" mkdir rmdir touch m…

单位个人怎样向报社的报纸投稿?

作为一名单位的信息宣传员,我肩负着每月定期在媒体上投稿发表文章的重任。然而,在投稿的道路上,我经历了不少波折和挫折。 一开始,我天真地以为只要将稿件发送到报社的投稿邮箱,就能轻松完成任务。然而,现实却远比我想象的复杂。邮箱投稿的竞争异常激烈,编辑们会在众多稿件中挑…