实现多级树形结构查询 比如分类(父分类、子分类)

实现多级树形结构查询 比如分类(父分类、子分类)

数据库表结构

CREATE TABLE `course_category` (
  `id` varchar(20) NOT NULL COMMENT '主键',
  `name` varchar(32) NOT NULL COMMENT '分类名称',
  `label` varchar(32) DEFAULT NULL COMMENT '分类标签默认和名称一样',
  `parentid` varchar(20) NOT NULL DEFAULT '0' COMMENT '父结点id(第一级的父节点是0,自关联字段id)',
  `is_show` tinyint DEFAULT NULL COMMENT '是否显示',
  `orderby` int DEFAULT NULL COMMENT '排序字段',
  `is_leaf` tinyint DEFAULT NULL COMMENT '是否叶子',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 ROW_FORMAT=DYNAMIC COMMENT='课程分类';

仅用于分类级别固定

比如固定两级或者三级可以用 表的自连接

SELECT
	one.id one_id,
	one.label one_label,
	two.id two_id,
	two.label two_label 
FROM
	course_category one
	INNER JOIN course_category two ON one.id = two.parentid 
WHERE
	one.parentid = '1' 
	AND one.is_show = '1' 
	AND two.is_show = '1' 
ORDER BY
	one.orderby,
	two.orderby;

image-20240522162346133

递归查询方法mysql8支持(灵活)

递归并不会降低数据库的性能,但是为了避免无限递归 默认递归次数为1000次,可以通过设置cte_max_recursion_depth参数增加递归深度还可以设置max_execution_time限制执行时间,超过此时间也会终止递归操作。

根据子查到所有的父

WITH recursive t1 as(
	select * from course_category where id ='1-1-1'
	UNION all
	select course_category.* from course_category INNER JOIN t1 on t1.parentid= course_category.id
)
SELECT * from t1 order by t1.id, t1.orderby;

image-20240522162403624

根据父查到所有的子

WITH recursive t2 as(
	select * from course_category where id ='1'
	UNION all
	select course_category.* from course_category INNER JOIN t2 on t2.id= course_category.parentid
)
SELECT * from t2 order by t2.id, t2.orderby;

image-20240522162420892

java 代码实现

实体类po
package com.jhj.content.model.po;

import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.io.Serializable;

/**
 * <p>
 * 课程分类
 * </p>
 *
 * @author jhj
 */
@Data
@TableName("course_category")
public class CourseCategory implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 主键
     */
    private String id;

    /**
     * 分类名称
     */
    private String name;

    /**
     * 分类标签默认和名称一样
     */
    private String label;

    /**
     * 父结点id(第一级的父节点是0,自关联字段id)
     */
    private String parentid;

    /**
     * 是否显示
     */
    private Integer isShow;

    /**
     * 排序字段
     */
    private Integer orderby;

    /**
     * 是否叶子
     */
    private Integer isLeaf;


}
返回信息封装
package com.jhj.content.model.dto;

import com.jhj.content.model.po.CourseCategory;
import lombok.Data;
import lombok.ToString;

import java.io.Serializable;
import java.util.List;

/**
 * @author jhj
 * @version 1.0.0
 * @ClassName CourseCategoryTreeDto.java
 * @Description 课程分类树形结构
 * @createTime 2024年05月22日 15:18:00
 */
@Data
@ToString
public class CourseCategoryTreeDto extends CourseCategory implements Serializable {
    List<CourseCategoryTreeDto> childrenTreeNodes;
}
mapper.xml
<?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.jhj.content.mapper.CourseCategoryMapper">

    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.jhj.content.model.po.CourseCategory">
        <id column="id" property="id" />
        <result column="name" property="name" />
        <result column="label" property="label" />
        <result column="parentid" property="parentid" />
        <result column="is_show" property="isShow" />
        <result column="orderby" property="orderby" />
        <result column="is_leaf" property="isLeaf" />
    </resultMap>

    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, name, label, parentid, is_show, orderby, is_leaf
    </sql>

    <select id="selectTreeNode" parameterType="string" resultType="com.jhj.content.model.dto.CourseCategoryTreeDto">
        WITH recursive t2 as(
            select * from course_category where id =#{id}
            UNION all
            select course_category.* from course_category INNER JOIN t2 on t2.id= course_category.parentid
        )
        SELECT * from t2 order by t2.id, t2.orderby;
    </select>
</mapper>
mapper
package com.jhj.content.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jhj.content.model.dto.CourseCategoryTreeDto;
import com.jhj.content.model.po.CourseCategory;

import java.util.List;

/**
 * <p>
 * 课程分类 Mapper 接口
 * </p>
 *
 * @author jhj
 */
public interface CourseCategoryMapper extends BaseMapper<CourseCategory> {

    //使用递归查询分类
    public List<CourseCategoryTreeDto> selectTreeNode(String id);
}
service
package com.jhj.content.service;

import com.jhj.content.model.dto.CourseCategoryTreeDto;

import java.util.List;

/**
 * @author jhj
 * @version 1.0.0
 * @ClassName CourseCategoryService.java
 * @Description 课程分类实现接口
 * @createTime 2024年05月22日 18:10:00
 */
public interface CourseCategoryService {
    public List<CourseCategoryTreeDto> queryTreeNodes(String id);
}
serviceImpl
package com.jhj.content.service.impl;

import com.jhj.content.mapper.CourseCategoryMapper;
import com.jhj.content.model.dto.CourseCategoryTreeDto;
import com.jhj.content.service.CourseCategoryService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * @author jhj
 * @version 1.0.0
 * @ClassName CourseCategoryServiceImpl.java
 * @Description 课程分类实现类
 * @createTime 2024年05月22日 18:10:00
 */
@Service
@Slf4j
public class CourseCategoryServiceImpl implements CourseCategoryService {
    
    @Autowired
    CourseCategoryMapper courseCategoryMapper;
    
    @Override
    public List<CourseCategoryTreeDto> queryTreeNodes(String id) {
        List<CourseCategoryTreeDto> res=new ArrayList<>();
        //调用mapper 递归查询出分类信息
        List<CourseCategoryTreeDto> courseCategoryTreeDtos = courseCategoryMapper.selectTreeNode(id);
        //找到每个节点的子节点,最终封装成List<CourseCategoryTreeDto>
        //先将list 转换为map key为节点id,value为对象 目的是方便从map 获取节点 filter(item->!id.equals(item.getId()))排除根节点
        Map<String, CourseCategoryTreeDto> map = courseCategoryTreeDtos.stream().filter(item->!id.equals(item.getId())).collect(Collectors.toMap(key -> key.getId(), value -> value, (key1, key2) -> key2));
        courseCategoryTreeDtos.stream().filter(item->!id.equals(item.getId())).forEach(item->{
            if(item.getParentid().equals(id)){
                res.add(item);
            }
            //找到父节点
            CourseCategoryTreeDto courseCategoryTreeDto = map.get(item.getParentid());
            if(courseCategoryTreeDto!=null) {
                //如果子为空 则new一个
                if (courseCategoryTreeDto.getChildrenTreeNodes() == null) {
                    courseCategoryTreeDto.setChildrenTreeNodes(new ArrayList<CourseCategoryTreeDto>());
                }
                //往子里放
                courseCategoryTreeDto.getChildrenTreeNodes().add(item);
            }

        });
        //从头遍历list 一边遍历一边查找子节点放在父节点的childrenTreeNodes中

        return res;
    }
}
controller
package com.jhj.content.api;

import com.jhj.content.model.dto.CourseCategoryTreeDto;
import com.jhj.content.service.CourseCategoryService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * @author jhj
 * @version 1.0.0
 * @ClassName CourseCategoryController.java
 * @Description 课程分类接口
 * @createTime 2024年05月13日 01:00:00
 */
@Tag(name = "课程分类管理接口",description = "课程分类管理接口")
@RestController
public class CourseCategoryController {
    @Autowired
    CourseCategoryService courseCategoryService;

    @Operation(summary = "课程分类树形数据")
    @GetMapping("/course-category/tree-nodes")
    public List<CourseCategoryTreeDto> queryTreeNodes(){

        return courseCategoryService.queryTreeNodes("1");
    }
}
接口响应结果
[
  {
    "id": "1-1",
    "name": "前端开发",
    "label": "前端开发",
    "parentid": "1",
    "isShow": 1,
    "orderby": 1,
    "isLeaf": 0,
    "childrenTreeNodes": [
      {
        "id": "1-1-1",
        "name": "HTML/CSS",
        "label": "HTML/CSS",
        "parentid": "1-1",
        "isShow": 1,
        "orderby": 1,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-1-10",
        "name": "其它",
        "label": "其它",
        "parentid": "1-1",
        "isShow": 1,
        "orderby": 10,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-1-2",
        "name": "JavaScript",
        "label": "JavaScript",
        "parentid": "1-1",
        "isShow": 1,
        "orderby": 2,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-1-3",
        "name": "jQuery",
        "label": "jQuery",
        "parentid": "1-1",
        "isShow": 1,
        "orderby": 3,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-1-4",
        "name": "ExtJS",
        "label": "ExtJS",
        "parentid": "1-1",
        "isShow": 1,
        "orderby": 4,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-1-5",
        "name": "AngularJS",
        "label": "AngularJS",
        "parentid": "1-1",
        "isShow": 1,
        "orderby": 5,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-1-6",
        "name": "ReactJS",
        "label": "ReactJS",
        "parentid": "1-1",
        "isShow": 1,
        "orderby": 6,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-1-7",
        "name": "Bootstrap",
        "label": "Bootstrap",
        "parentid": "1-1",
        "isShow": 1,
        "orderby": 7,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-1-8",
        "name": "Node.js",
        "label": "Node.js",
        "parentid": "1-1",
        "isShow": 1,
        "orderby": 8,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-1-9",
        "name": "Vue",
        "label": "Vue",
        "parentid": "1-1",
        "isShow": 1,
        "orderby": 9,
        "isLeaf": 1,
        "childrenTreeNodes": null
      }
    ]
  },
  {
    "id": "1-10",
    "name": "研发管理",
    "label": "研发管理",
    "parentid": "1",
    "isShow": 1,
    "orderby": 10,
    "isLeaf": 0,
    "childrenTreeNodes": [
      {
        "id": "1-10-1",
        "name": "敏捷开发",
        "label": "敏捷开发",
        "parentid": "1-10",
        "isShow": 1,
        "orderby": 1,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-10-2",
        "name": "软件设计",
        "label": "软件设计",
        "parentid": "1-10",
        "isShow": 1,
        "orderby": 2,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-10-3",
        "name": "软件测试",
        "label": "软件测试",
        "parentid": "1-10",
        "isShow": 1,
        "orderby": 3,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-10-4",
        "name": "研发管理",
        "label": "研发管理",
        "parentid": "1-10",
        "isShow": 1,
        "orderby": 4,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-10-5",
        "name": "其它",
        "label": "其它",
        "parentid": "1-10",
        "isShow": 1,
        "orderby": 5,
        "isLeaf": 1,
        "childrenTreeNodes": null
      }
    ]
  },
  {
    "id": "1-11",
    "name": "系统运维",
    "label": "系统运维",
    "parentid": "1",
    "isShow": 1,
    "orderby": 11,
    "isLeaf": 0,
    "childrenTreeNodes": [
      {
        "id": "1-11-1",
        "name": "Linux",
        "label": "Linux",
        "parentid": "1-11",
        "isShow": 1,
        "orderby": 1,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-11-10",
        "name": "其它",
        "label": "其它",
        "parentid": "1-11",
        "isShow": 1,
        "orderby": 10,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-11-2",
        "name": "Windows",
        "label": "Windows",
        "parentid": "1-11",
        "isShow": 1,
        "orderby": 2,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-11-3",
        "name": "UNIX",
        "label": "UNIX",
        "parentid": "1-11",
        "isShow": 1,
        "orderby": 3,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-11-4",
        "name": "Mac OS",
        "label": "Mac OS",
        "parentid": "1-11",
        "isShow": 1,
        "orderby": 4,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-11-5",
        "name": "网络技术",
        "label": "网络技术",
        "parentid": "1-11",
        "isShow": 1,
        "orderby": 5,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-11-6",
        "name": "路由协议",
        "label": "路由协议",
        "parentid": "1-11",
        "isShow": 1,
        "orderby": 6,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-11-7",
        "name": "无线网络",
        "label": "无线网络",
        "parentid": "1-11",
        "isShow": 1,
        "orderby": 7,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-11-8",
        "name": "Ngnix",
        "label": "Ngnix",
        "parentid": "1-11",
        "isShow": 1,
        "orderby": 8,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-11-9",
        "name": "邮件服务器",
        "label": "邮件服务器",
        "parentid": "1-11",
        "isShow": 1,
        "orderby": 9,
        "isLeaf": 1,
        "childrenTreeNodes": null
      }
    ]
  },
  {
    "id": "1-12",
    "name": "产品经理",
    "label": "产品经理",
    "parentid": "1",
    "isShow": 1,
    "orderby": 12,
    "isLeaf": 0,
    "childrenTreeNodes": [
      {
        "id": "1-12-1",
        "name": "交互设计",
        "label": "交互设计",
        "parentid": "1-12",
        "isShow": 1,
        "orderby": 1,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-12-2",
        "name": "产品设计",
        "label": "产品设计",
        "parentid": "1-12",
        "isShow": 1,
        "orderby": 2,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-12-3",
        "name": "原型设计",
        "label": "原型设计",
        "parentid": "1-12",
        "isShow": 1,
        "orderby": 3,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-12-4",
        "name": "用户体验",
        "label": "用户体验",
        "parentid": "1-12",
        "isShow": 1,
        "orderby": 4,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-12-5",
        "name": "需求分析",
        "label": "需求分析",
        "parentid": "1-12",
        "isShow": 1,
        "orderby": 5,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-12-6",
        "name": "其它",
        "label": "其它",
        "parentid": "1-12",
        "isShow": 1,
        "orderby": 6,
        "isLeaf": 1,
        "childrenTreeNodes": null
      }
    ]
  },
  {
    "id": "1-13",
    "name": "企业/办公/职场",
    "label": "企业/办公/职场",
    "parentid": "1",
    "isShow": 1,
    "orderby": 13,
    "isLeaf": 0,
    "childrenTreeNodes": [
      {
        "id": "1-13-1",
        "name": "运营管理",
        "label": "运营管理",
        "parentid": "1-13",
        "isShow": 1,
        "orderby": 1,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-13-2",
        "name": "企业信息化",
        "label": "企业信息化",
        "parentid": "1-13",
        "isShow": 1,
        "orderby": 2,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-13-3",
        "name": "网络营销",
        "label": "网络营销",
        "parentid": "1-13",
        "isShow": 1,
        "orderby": 3,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-13-4",
        "name": "Office/WPS",
        "label": "Office/WPS",
        "parentid": "1-13",
        "isShow": 1,
        "orderby": 4,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-13-5",
        "name": "招聘/面试",
        "label": "招聘/面试",
        "parentid": "1-13",
        "isShow": 1,
        "orderby": 5,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-13-6",
        "name": "电子商务",
        "label": "电子商务",
        "parentid": "1-13",
        "isShow": 1,
        "orderby": 6,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-13-7",
        "name": "CRM",
        "label": "CRM",
        "parentid": "1-13",
        "isShow": 1,
        "orderby": 7,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-13-8",
        "name": "ERP",
        "label": "ERP",
        "parentid": "1-13",
        "isShow": 1,
        "orderby": 8,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-13-9",
        "name": "其它",
        "label": "其它",
        "parentid": "1-13",
        "isShow": 1,
        "orderby": 9,
        "isLeaf": 1,
        "childrenTreeNodes": null
      }
    ]
  },
  {
    "id": "1-14",
    "name": "信息安全",
    "label": "信息安全",
    "parentid": "1",
    "isShow": 1,
    "orderby": 14,
    "isLeaf": 0,
    "childrenTreeNodes": [
      {
        "id": "1-14-1",
        "name": "密码学/加密/破解",
        "label": "密码学/加密/破解",
        "parentid": "1-14",
        "isShow": 1,
        "orderby": 1,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-14-10",
        "name": "其它",
        "label": "其它",
        "parentid": "1-14",
        "isShow": 1,
        "orderby": 10,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-14-2",
        "name": "渗透测试",
        "label": "渗透测试",
        "parentid": "1-14",
        "isShow": 1,
        "orderby": 2,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-14-3",
        "name": "社会工程",
        "label": "社会工程",
        "parentid": "1-14",
        "isShow": 1,
        "orderby": 3,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-14-4",
        "name": "漏洞挖掘与利用",
        "label": "漏洞挖掘与利用",
        "parentid": "1-14",
        "isShow": 1,
        "orderby": 4,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-14-5",
        "name": "云安全",
        "label": "云安全",
        "parentid": "1-14",
        "isShow": 1,
        "orderby": 5,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-14-6",
        "name": "防护加固",
        "label": "防护加固",
        "parentid": "1-14",
        "isShow": 1,
        "orderby": 6,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-14-7",
        "name": "代码审计",
        "label": "代码审计",
        "parentid": "1-14",
        "isShow": 1,
        "orderby": 7,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-14-8",
        "name": "移动安全",
        "label": "移动安全",
        "parentid": "1-14",
        "isShow": 1,
        "orderby": 8,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-14-9",
        "name": "病毒木马",
        "label": "病毒木马",
        "parentid": "1-14",
        "isShow": 1,
        "orderby": 9,
        "isLeaf": 1,
        "childrenTreeNodes": null
      }
    ]
  },
  {
    "id": "1-15",
    "name": "测试目录",
    "label": "测试目录",
    "parentid": "1",
    "isShow": 1,
    "orderby": 15,
    "isLeaf": 0,
    "childrenTreeNodes": [
      {
        "id": "1-15-1",
        "name": "测试目录01",
        "label": "测试目录01",
        "parentid": "1-15",
        "isShow": 1,
        "orderby": 1,
        "isLeaf": 1,
        "childrenTreeNodes": null
      }
    ]
  },
  {
    "id": "1-2",
    "name": "移动开发",
    "label": "移动开发",
    "parentid": "1",
    "isShow": 1,
    "orderby": 2,
    "isLeaf": 0,
    "childrenTreeNodes": [
      {
        "id": "1-2-1",
        "name": "微信开发",
        "label": "微信开发",
        "parentid": "1-2",
        "isShow": 1,
        "orderby": 1,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-2-2",
        "name": "iOS",
        "label": "iOS",
        "parentid": "1-2",
        "isShow": 1,
        "orderby": 2,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-2-3",
        "name": "手游开发",
        "label": "手游开发",
        "parentid": "1-2",
        "isShow": 1,
        "orderby": 3,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-2-4",
        "name": "Swift",
        "label": "Swift",
        "parentid": "1-2",
        "isShow": 1,
        "orderby": 4,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-2-5",
        "name": "Android",
        "label": "Android",
        "parentid": "1-2",
        "isShow": 1,
        "orderby": 5,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-2-6",
        "name": "ReactNative",
        "label": "ReactNative",
        "parentid": "1-2",
        "isShow": 1,
        "orderby": 6,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-2-7",
        "name": "Cordova",
        "label": "Cordova",
        "parentid": "1-2",
        "isShow": 1,
        "orderby": 7,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-2-8",
        "name": "其它",
        "label": "其它",
        "parentid": "1-2",
        "isShow": 1,
        "orderby": 8,
        "isLeaf": 1,
        "childrenTreeNodes": null
      }
    ]
  },
  {
    "id": "1-3",
    "name": "编程开发",
    "label": "编程开发",
    "parentid": "1",
    "isShow": 1,
    "orderby": 3,
    "isLeaf": 0,
    "childrenTreeNodes": [
      {
        "id": "1-3-1",
        "name": "C/C++",
        "label": "C/C++",
        "parentid": "1-3",
        "isShow": 1,
        "orderby": 1,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-3-2",
        "name": "Java",
        "label": "Java",
        "parentid": "1-3",
        "isShow": 1,
        "orderby": 2,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-3-3",
        "name": ".NET",
        "label": ".NET",
        "parentid": "1-3",
        "isShow": 1,
        "orderby": 3,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-3-4",
        "name": "Objective-C",
        "label": "Objective-C",
        "parentid": "1-3",
        "isShow": 1,
        "orderby": 4,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-3-5",
        "name": "Go语言",
        "label": "Go语言",
        "parentid": "1-3",
        "isShow": 1,
        "orderby": 5,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-3-6",
        "name": "Python",
        "label": "Python",
        "parentid": "1-3",
        "isShow": 1,
        "orderby": 6,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-3-7",
        "name": "Ruby/Rails",
        "label": "Ruby/Rails",
        "parentid": "1-3",
        "isShow": 1,
        "orderby": 7,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-3-8",
        "name": "其它",
        "label": "其它",
        "parentid": "1-3",
        "isShow": 1,
        "orderby": 8,
        "isLeaf": 1,
        "childrenTreeNodes": null
      }
    ]
  },
  {
    "id": "1-4",
    "name": "数据库",
    "label": "数据库",
    "parentid": "1",
    "isShow": 1,
    "orderby": 4,
    "isLeaf": 0,
    "childrenTreeNodes": [
      {
        "id": "1-4-1",
        "name": "Oracle",
        "label": "Oracle",
        "parentid": "1-4",
        "isShow": 1,
        "orderby": 1,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-4-2",
        "name": "MySQL",
        "label": "MySQL",
        "parentid": "1-4",
        "isShow": 1,
        "orderby": 2,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-4-3",
        "name": "SQL Server",
        "label": "SQL Server",
        "parentid": "1-4",
        "isShow": 1,
        "orderby": 3,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-4-4",
        "name": "DB2",
        "label": "DB2",
        "parentid": "1-4",
        "isShow": 1,
        "orderby": 4,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-4-5",
        "name": "NoSQL",
        "label": "NoSQL",
        "parentid": "1-4",
        "isShow": 1,
        "orderby": 5,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-4-6",
        "name": "Mongo DB",
        "label": "Mongo DB",
        "parentid": "1-4",
        "isShow": 1,
        "orderby": 6,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-4-7",
        "name": "Hbase",
        "label": "Hbase",
        "parentid": "1-4",
        "isShow": 1,
        "orderby": 7,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-4-8",
        "name": "数据仓库",
        "label": "数据仓库",
        "parentid": "1-4",
        "isShow": 1,
        "orderby": 8,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-4-9",
        "name": "其它",
        "label": "其它",
        "parentid": "1-4",
        "isShow": 1,
        "orderby": 9,
        "isLeaf": 1,
        "childrenTreeNodes": null
      }
    ]
  },
  {
    "id": "1-5",
    "name": "人工智能",
    "label": "人工智能",
    "parentid": "1",
    "isShow": 1,
    "orderby": 5,
    "isLeaf": 0,
    "childrenTreeNodes": [
      {
        "id": "1-5-1",
        "name": "机器学习",
        "label": "机器学习",
        "parentid": "1-5",
        "isShow": 1,
        "orderby": 1,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-5-2",
        "name": "深度学习",
        "label": "深度学习",
        "parentid": "1-5",
        "isShow": 1,
        "orderby": 2,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-5-3",
        "name": "语音识别",
        "label": "语音识别",
        "parentid": "1-5",
        "isShow": 1,
        "orderby": 3,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-5-4",
        "name": "计算机视觉",
        "label": "计算机视觉",
        "parentid": "1-5",
        "isShow": 1,
        "orderby": 4,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-5-5",
        "name": "NLP",
        "label": "NLP",
        "parentid": "1-5",
        "isShow": 1,
        "orderby": 5,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-5-6",
        "name": "强化学习",
        "label": "强化学习",
        "parentid": "1-5",
        "isShow": 1,
        "orderby": 6,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-5-7",
        "name": "其它",
        "label": "其它",
        "parentid": "1-5",
        "isShow": 1,
        "orderby": 7,
        "isLeaf": 1,
        "childrenTreeNodes": null
      }
    ]
  },
  {
    "id": "1-6",
    "name": "云计算/大数据",
    "label": "云计算/大数据",
    "parentid": "1",
    "isShow": 1,
    "orderby": 6,
    "isLeaf": 0,
    "childrenTreeNodes": [
      {
        "id": "1-6-1",
        "name": "Spark",
        "label": "Spark",
        "parentid": "1-6",
        "isShow": 1,
        "orderby": 1,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-6-2",
        "name": "Hadoop",
        "label": "Hadoop",
        "parentid": "1-6",
        "isShow": 1,
        "orderby": 2,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-6-3",
        "name": "OpenStack",
        "label": "OpenStack",
        "parentid": "1-6",
        "isShow": 1,
        "orderby": 3,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-6-4",
        "name": "Docker/K8S",
        "label": "Docker/K8S",
        "parentid": "1-6",
        "isShow": 1,
        "orderby": 4,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-6-5",
        "name": "云计算基础架构",
        "label": "云计算基础架构",
        "parentid": "1-6",
        "isShow": 1,
        "orderby": 5,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-6-6",
        "name": "虚拟化技术",
        "label": "虚拟化技术",
        "parentid": "1-6",
        "isShow": 1,
        "orderby": 6,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-6-7",
        "name": "云平台",
        "label": "云平台",
        "parentid": "1-6",
        "isShow": 1,
        "orderby": 7,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-6-8",
        "name": "ELK",
        "label": "ELK",
        "parentid": "1-6",
        "isShow": 1,
        "orderby": 8,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-6-9",
        "name": "其它",
        "label": "其它",
        "parentid": "1-6",
        "isShow": 1,
        "orderby": 9,
        "isLeaf": 1,
        "childrenTreeNodes": null
      }
    ]
  },
  {
    "id": "1-7",
    "name": "UI设计",
    "label": "UI设计",
    "parentid": "1",
    "isShow": 1,
    "orderby": 7,
    "isLeaf": 0,
    "childrenTreeNodes": [
      {
        "id": "1-7-1",
        "name": "Photoshop",
        "label": "Photoshop",
        "parentid": "1-7",
        "isShow": 1,
        "orderby": 1,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-7-10",
        "name": "InDesign",
        "label": "InDesign",
        "parentid": "1-7",
        "isShow": 1,
        "orderby": 10,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-7-11",
        "name": "Pro/Engineer",
        "label": "Pro/Engineer",
        "parentid": "1-7",
        "isShow": 1,
        "orderby": 11,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-7-12",
        "name": "Cinema 4D",
        "label": "Cinema 4D",
        "parentid": "1-7",
        "isShow": 1,
        "orderby": 12,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-7-13",
        "name": "3D Studio",
        "label": "3D Studio",
        "parentid": "1-7",
        "isShow": 1,
        "orderby": 13,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-7-14",
        "name": "After Effects(AE)",
        "label": "After Effects(AE)",
        "parentid": "1-7",
        "isShow": 1,
        "orderby": 14,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-7-15",
        "name": "原画设计",
        "label": "原画设计",
        "parentid": "1-7",
        "isShow": 1,
        "orderby": 15,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-7-16",
        "name": "动画制作",
        "label": "动画制作",
        "parentid": "1-7",
        "isShow": 1,
        "orderby": 16,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-7-17",
        "name": "Dreamweaver",
        "label": "Dreamweaver",
        "parentid": "1-7",
        "isShow": 1,
        "orderby": 17,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-7-18",
        "name": "Axure",
        "label": "Axure",
        "parentid": "1-7",
        "isShow": 1,
        "orderby": 18,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-7-19",
        "name": "其它",
        "label": "其它",
        "parentid": "1-7",
        "isShow": 1,
        "orderby": 19,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-7-2",
        "name": "3Dmax",
        "label": "3Dmax",
        "parentid": "1-7",
        "isShow": 1,
        "orderby": 2,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-7-3",
        "name": "Illustrator",
        "label": "Illustrator",
        "parentid": "1-7",
        "isShow": 1,
        "orderby": 3,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-7-4",
        "name": "Flash",
        "label": "Flash",
        "parentid": "1-7",
        "isShow": 1,
        "orderby": 4,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-7-5",
        "name": "Maya",
        "label": "Maya",
        "parentid": "1-7",
        "isShow": 1,
        "orderby": 5,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-7-6",
        "name": "AUTOCAD",
        "label": "AUTOCAD",
        "parentid": "1-7",
        "isShow": 1,
        "orderby": 6,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-7-7",
        "name": "UG",
        "label": "UG",
        "parentid": "1-7",
        "isShow": 1,
        "orderby": 7,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-7-8",
        "name": "SolidWorks",
        "label": "SolidWorks",
        "parentid": "1-7",
        "isShow": 1,
        "orderby": 8,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-7-9",
        "name": "CorelDraw",
        "label": "CorelDraw",
        "parentid": "1-7",
        "isShow": 1,
        "orderby": 9,
        "isLeaf": 1,
        "childrenTreeNodes": null
      }
    ]
  },
  {
    "id": "1-8",
    "name": "游戏开发",
    "label": "游戏开发",
    "parentid": "1",
    "isShow": 1,
    "orderby": 8,
    "isLeaf": 0,
    "childrenTreeNodes": [
      {
        "id": "1-8-1",
        "name": "Cocos",
        "label": "Cocos",
        "parentid": "1-8",
        "isShow": 1,
        "orderby": 1,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-8-2",
        "name": "Unity3D",
        "label": "Unity3D",
        "parentid": "1-8",
        "isShow": 1,
        "orderby": 2,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-8-3",
        "name": "Flash",
        "label": "Flash",
        "parentid": "1-8",
        "isShow": 1,
        "orderby": 3,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-8-4",
        "name": "SpriteKit 2D",
        "label": "SpriteKit 2D",
        "parentid": "1-8",
        "isShow": 1,
        "orderby": 4,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-8-5",
        "name": "Unreal",
        "label": "Unreal",
        "parentid": "1-8",
        "isShow": 1,
        "orderby": 5,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-8-6",
        "name": "其它",
        "label": "其它",
        "parentid": "1-8",
        "isShow": 1,
        "orderby": 6,
        "isLeaf": 1,
        "childrenTreeNodes": null
      }
    ]
  },
  {
    "id": "1-9",
    "name": "智能硬件/物联网",
    "label": "智能硬件/物联网",
    "parentid": "1",
    "isShow": 1,
    "orderby": 9,
    "isLeaf": 0,
    "childrenTreeNodes": [
      {
        "id": "1-9-1",
        "name": "无线通信",
        "label": "无线通信",
        "parentid": "1-9",
        "isShow": 1,
        "orderby": 1,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-9-10",
        "name": "物联网技术",
        "label": "物联网技术",
        "parentid": "1-9",
        "isShow": 1,
        "orderby": 10,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-9-11",
        "name": "其它",
        "label": "其它",
        "parentid": "1-9",
        "isShow": 1,
        "orderby": 11,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-9-2",
        "name": "电子工程",
        "label": "电子工程",
        "parentid": "1-9",
        "isShow": 1,
        "orderby": 2,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-9-3",
        "name": "Arduino",
        "label": "Arduino",
        "parentid": "1-9",
        "isShow": 1,
        "orderby": 3,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-9-4",
        "name": "体感技术",
        "label": "体感技术",
        "parentid": "1-9",
        "isShow": 1,
        "orderby": 4,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-9-5",
        "name": "智能硬件",
        "label": "智能硬件",
        "parentid": "1-9",
        "isShow": 1,
        "orderby": 5,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-9-6",
        "name": "驱动/内核开发",
        "label": "驱动/内核开发",
        "parentid": "1-9",
        "isShow": 1,
        "orderby": 6,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-9-7",
        "name": "单片机/工控",
        "label": "单片机/工控",
        "parentid": "1-9",
        "isShow": 1,
        "orderby": 7,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-9-8",
        "name": "WinCE",
        "label": "WinCE",
        "parentid": "1-9",
        "isShow": 1,
        "orderby": 8,
        "isLeaf": 1,
        "childrenTreeNodes": null
      },
      {
        "id": "1-9-9",
        "name": "嵌入式",
        "label": "嵌入式",
        "parentid": "1-9",
        "isShow": 1,
        "orderby": 9,
        "isLeaf": 1,
        "childrenTreeNodes": null
      }
    ]
  }
]

本项目为开源项目,后续会接入多种功能,项目地址https://gitee.com/jhj-coding/jhj-ultimate-project,欢迎大家多多star。

作者声明

如有问题,欢迎指正!

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

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

相关文章

CLIP 论文的关键内容

CLIP 论文整体架构 该论文总共有 48 页&#xff0c;除去最后的补充材料十页去掉&#xff0c;正文也还有三十多页&#xff0c;其中大部分篇幅都留给了实验和响应的一些分析。 从头开始的话&#xff0c;第一页就是摘要&#xff0c;接下来一页多是引言&#xff0c;接下来的两页就…

qt-C++笔记之QThread使用

qt-C笔记之QThread使用 ——2024-05-26 下午 code review! 参考博文&#xff1a; qt-C笔记之使用QtConcurrent异步地执行槽函数中的内容&#xff0c;使其不阻塞主界面 qt-C笔记之QThread使用 文章目录 qt-C笔记之QThread使用一:Qt中几种多线程方法1.1. 使用 QThread 和 Lambda…

gnocchi学习小结

背景 总结gnocchi 4.4版本gnocchi-metricd工作流程 入口 gnocchi.cli.metricd metricd stop after processing metric默认为0&#xff0c;调servicemanager run MetricdServiceManager __init__ 服务逻辑封装到MetricdServiceManager初始化中 主要由MetricProcessor, Met…

火山引擎“奇袭”阿里云

图片&#xff5c;电影《美国队长3》剧照 ©自象限原创 作者丨程心 编辑丨罗辑 大模型价格战&#xff0c;已经不是什么新闻。 从OpenAI发布GPT-4o&#xff0c;将API价格下调50%&#xff0c;并宣布面向普通用户免费开始&#xff0c;就标志着大模型的竞争从性能进入到了成本…

Java设计模式 _行为型模式_迭代器模式

一、迭代器模式 1、迭代器模式 迭代器模式&#xff08;Iterator Pattern&#xff09;是一种行为型设计模式&#xff0c;用于顺序访问集合对象的元素&#xff0c;不需要关心集合对象的底层表示。如&#xff1a;java中的Iterator接口就是这个工作原理。 2、实现思路 &#xff0…

面试大杂烩之kafka

面试这个领域最近环境不行&#xff0c;所以卷起来流量挺大 搭建&#xff1a; 总体来说 比较简单&#xff0c;主要是配置文件&#xff0c;命令的话分开了producer /consumer/ topic 大概这么个意思。具体可以看里面的博客 #host配置 #安装包 wget https://archive.apache.or…

国内最受欢迎的7大API供应平台对比和介绍||电商API数据采集接口简要说明

本文将介绍7款API供应平台&#xff1a;聚合数据、百度APIStore、Apix、数说聚合、通联数据、HaoService、datasift 。排名不分先后&#xff01; 免费实用的API接口 第一部分 1、聚合数据&#xff08;API数据接口_开发者数据定制&#xff09; 2、百度API Store(API集市_APIStore…

C++第十九弹---string模拟实现(下)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 目录 1、修改操作 2、迭代器操作 3、字符串操作 4、非成员函数重载操作 总结 1、修改操作 1、string& operator (const char* s); //尾部插入…

骑行 - 新区永旺出发的环太湖路线

环过好几次太湖&#xff0c;但对路线都没太在意&#xff0c;都是跟着别人走的。这次自己制定一个路书&#xff0c;方便下次自己一个人环太湖时使用。 开始是使用高德地图做路书&#xff0c;只能在PC上做。我用的是网页版&#xff0c;每次选点太麻烦了。要输入地址搜索&#xff…

【C语言】八进制、十六进制

前言 在我们日常生活中使用的数往往是十进制的&#xff0c;而当我们学习C语言后我们会接触到许多不同的进制并且时常需要去思考与使用这些不同的进制&#xff08;尤其是2的幂相关的进制&#xff0c;因为这种计数系统比十进制更接近于计算机的二进制系统&#xff09;&#xff0…

5.26机器人基础-空间描述和变换2

在前文的基础上引入平移算子和旋转算子 1.平移算子 2.旋转算子 3.变换算子

推荐一款媒体影音嗅探神器—Chrome扩展插件(猫抓cat-catch)

目录 1.1、前言1.2、下载地址1.3、github Releases 版本说明1.4、安装步骤1.5、猫抓插件常规设置1.5.1、设置抓取文件的类型1.5.2、设置抓取文件的后缀名 1.1、前言 我们在日常上网的过程中&#xff0c;很多音频、视频网站下载资源都非常不方便&#xff0c;要么需要安装客户端&…

联邦学习(一)

世界第一本“联邦学习”专著——《联邦学习》。作者阅读数书籍《联邦学习实战》。 1.联邦学习概述 在构件全局模型时,其效果与数据被整合在一起进行集中式训练的效果几乎一致,这便是联邦学习提出的动机和核心思想。 核心理念:数据不动模型动,数据可用不可见。 传统训练范式…

初步认识栈和队列

Hello&#xff0c;everyone&#xff0c;今天小编讲解栈和队列的知识&#xff01;&#xff01;&#xff01; 1.栈 1.1栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。 进行数据插入和删除操作的一端 称为栈顶&…

hsql学习笔记

1. row_number() over (partition by uid order by dt 分析&#xff1a; row_number()&#xff1a; 这是一个窗口函数&#xff0c;用于为结果集中的每一行分配一个唯一的序号。默认情况下&#xff0c;这个序号是按照查询结果的顺序来分配的&#xff0c;但你可以通过OVER()子句…

Mybatis源码剖析---第二讲

Mybatis源码剖析—第二讲 那我们在讲完了mappedstatement这个类&#xff0c;它的一个核心作用之后呢&#xff1f;那下面我有一个问题想问问各位。作为mappedstatement来讲&#xff0c;它封装的是一个select标签或者insert标签。但是呢&#xff0c;我们需要大家注意的是什么&am…

文件夹打开出错?这里有你需要的数据恢复与预防指南

在日常使用电脑时&#xff0c;我们有时会遇到文件夹打开出错的情况。当你尝试访问某个文件夹时&#xff0c;系统可能会弹出一个错误提示&#xff0c;告诉你无法打开该文件夹。这种情况不仅会影响我们的工作效率&#xff0c;还可能导致重要数据的丢失。接下来&#xff0c;我们将…

Java进阶学习笔记24——Object类

Object类: Object类是Java中所有类的祖宗类&#xff0c;因此&#xff0c;Java中所有类的对象都可以直接使用Object类中提供的一些方法。 所有类都是Object类的子孙类。 API文档&#xff1a; Object类的成员方法&#xff1a; Object类的常见方法&#xff1a; Student类&…

HCIP-Datacom-ARST自选题库_02_网络安全【道题】

一、单选题 1.关于网络安全性优化的内容&#xff0c;下列哪个选项是错误的? 管理安全 边界安全 访问控制 日志管理 2.如图所示&#xff0c;网络管理员为了抵御DHcP Server仿冒者攻击&#xff0c;在交换机上部署了DHcp snoping功能&#xff0c;那么以下哪一个接口应该被设…

简单的python程序,把它做成docker镜像

1&#xff0c;python程序准备 在linux主机的/tmp/pythontest路径下创建一个test.py程序文件&#xff0c; 程序内容很简单 就是一句打印 print(hello world, docker)2&#xff0c;再准备一个Dockerfile文件 这个Dockerfile也是放在主机linux中的/tmp/pythontest路径下&#x…