先上代码

private JSONArray getJsonArray(){        QueryWrapper<KltSoftExamineEntity> kltSoftExamineQueryWrapper=new QueryWrapper<>();        kltSoftExamineQueryWrapper.select("platform").groupBy("platform");        List<KltSoftExamineEntity> platForms=kltSoftExamineMapper.selectList(kltSoftExamineQueryWrapper);        JSONArray jsonArray=new JSONArray();        JSONObject jsonPlatObject =new JSONObject();        platForms.forEach(platForm->{            jsonPlatObject.put("plateformCode",platForm.getPlatform());//1            jsonPlatObject.put("plateformName","platformName");//2            //获取serverList            JSONArray jsonServerListArray=new JSONArray();            QueryWrapper<KltSoftExamineEntity> kltSoftExamineQueryWrapper1=new QueryWrapper<>();            kltSoftExamineQueryWrapper1.select("server_ip").groupBy("server_ip").eq("platform",platForm.getPlatform());            List<KltSoftExamineEntity> serverIps=kltSoftExamineMapper.selectList(kltSoftExamineQueryWrapper1);            JSONObject jsonServerObject =new JSONObject();            AtomicInteger i= new AtomicInteger();            serverIps.forEach(serverIp->{                jsonServerObject.put("serverName","licens-server"+i);//2.1                i.getAndIncrement();                jsonServerObject.put("serverIp",serverIp.getServerIp());//2.2                //获取softList                JSONArray jsonSoftListArray=new JSONArray();                QueryWrapper<KltSoftExamineEntity> kltSoftExamineQueryWrapper2=new QueryWrapper<>();                kltSoftExamineQueryWrapper2.select("soft_name").groupBy("soft_name").eq("server_ip",serverIp.getServerIp());                List<KltSoftExamineEntity> softNames=kltSoftExamineMapper.selectList(kltSoftExamineQueryWrapper2);                JSONObject jsonSoftObject =new JSONObject();                softNames.forEach(softName->{                    jsonSoftObject.put("softName",softName.getSoftName());//3.1                    //获取featureList                    JSONArray jsonFeatureListArray=new JSONArray();                    QueryWrapper<KltSoftExamineEntity> kltSoftExamineQueryWrapper3=new QueryWrapper<>();                    kltSoftExamineQueryWrapper3.select("feature_name").groupBy("feature_name").eq("soft_name",softName.getSoftName());                    List<KltSoftExamineEntity> featureNames=kltSoftExamineMapper.selectList(kltSoftExamineQueryWrapper3);                    featureNames.forEach(featureName->{                        JSONObject jsonFeatureObject =new JSONObject();                        jsonFeatureObject.put("featureName",featureName.getFeatureName());//4.1                        jsonFeatureListArray.add(jsonFeatureObject);                    });                    jsonSoftObject.put("featureList",jsonFeatureListArray);//3.2                    jsonSoftListArray.add(jsonSoftObject);                });                jsonServerObject.put("softList",jsonSoftListArray);//2.3                jsonServerListArray.add(jsonServerObject);            });            //serverList是JSONArray            jsonPlatObject.put("serverList",jsonServerListArray);//3            jsonArray.add(jsonPlatObject);        });        return jsonArray;    }

上述对数据库的操作都是在一张表下面取的

思路
  1. 依据查问的字段再回表查问
  2. 为了避免查问的数据反复,用到了groupby()函数

全部都是本人手写的,尽管多层嵌套,办法笨笨的,然而好有成就感!