高校社团管理系统__devlog11

2021.11.14
项目参考:
1、后端:https://www.bilibili.com/video/BV1y7411R73P
2、前端:https://www.bilibili.com/video/BV1fw411d7R5?p=31

一、TreeNode

受到实习公司的启发,我毕设也弄了一个TreeNode来存储系统中很常用到的多级层级结构。Antd中的Cascader组件,树形的表格等都需要用到这样的数据结构。

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

表结构如下:其中用level来标记当前是第几层,type来标记当前是什么类型
例如college学院-major专业-class班级是同一场景下的。
在这里插入图片描述

先查询到所有的树节点(这里还涉及到Mybatis3的逆向工程生成的SQL的API的使用,下面这样就能实现Select * from TreeNode where type = ‘COLLEGE’ or type = ‘MAJOR’ or type=‘CLASS’的效果)
在这里插入图片描述
然后写了一个通用的方法来构建树结构(感觉我好菜,好像Java的水平好久都没提高了,比如枚举、泛型、反射高级一点的东西都基本不会用。
比如这里我原先是想要根据isLeaf来判断当前是否是叶子节点,是就没有必要往下for循环了,从而实现动态来决定for循环几次,但是这里我只会用level判断,所有就只能支持3层的树结构了。。。)
在这里插入图片描述
使用方法就是先查到所有的节点(这个时候他们还是平级的,没有层级结构,只是一个List),利用这个工具类得到树结构
在这里插入图片描述

接口返回效果:
在这里插入图片描述

二、枚举类 和 switch 的结合使用

枚举eg:

package com.jmu.uacs.enums;

public enum TreeNodeEnum {

    COLLEGE("COLLEGE", "学院"),
    MAJOR("MAJOR", "专业"),
    CLASS("CLASS", "班级"),
    CAMPUS("CAMPUS", "校区"),
    BUILDING("BUILDING", "教学楼"),
    CLASSROOM("CLASSROOM", "教室"),
    TAG("TAG", "标签");

    private String value;
    private String lable;

    TreeNodeEnum(String value, String lable) {
        this.value = value;
        this.lable = lable;
    }

    public String getValue() {
        return value;
    }

    public String getLable() {
        return lable;
    }

    public static TreeNodeEnum getEnumByValue(String value) {
        for (TreeNodeEnum enums : TreeNodeEnum.values()) {
            if (enums.getValue().equals(value)) {
                return enums;
            }
        }
        return null;
    }
}

我原来是打算这么用的:
在这里插入图片描述
但是也看到了,编译都不通过。case 后面需要常量,可是这么写是一个变量。然后我去网上查了一下,改成了下面这个样子:
在这里插入图片描述
switch内的是我们的Enum类型的,case就是里面定义的枚举。getEnumByValue就是用前端传过来的type来获取对应的enum。我一直感觉枚举好难用啊,为什么他不自身不提供根据String来获取对应Enum的方法呢,还要我们自己实现。

三、灵异事件

还遇到一个贼诡异的事情
在这里插入图片描述
在这里插入图片描述
我本来用来接收参数的VO中pId是Integer类型的,但是我axios发送的请求,vo的pId接收到的一直是null,但是我用Swagger的接口测试UI就可以接收到。莫名其妙的,我就怀疑是由于Integer是引用类型,他和axios的数值并不能自动映射匹配上,我就把Interger改成int了,果然就成功了。

??? 黑人问号
在这里插入图片描述

// 事后
但是上面的成功也是假象,0插入成功只是因为VO初始化的时候,int类型默认就是0,所有我后面pId不是0的时候,VO仍然接收不到,存到数据库中仍然是0

我盯得眼睛都要瞎了,突然发现,swagger的pid的 i 是小写的!!为什么??我VO里面明明写的是pId,是大写的I!!我也反复编译过,确认没问题了,这要是没用swagger-ui测试接口,我下辈子都不知道为什么??!这也太坑了。估计是swagger自己定的啥规矩。。。醉了
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值