近期,在做一个发布消息的功能的时候 需要在页面中显示一个树状图 把所有的可以发布的对象都排列出来 比如 发布到一个学院 一个专业 一个班级 一个人。
具体传到前端的json类似于这个样子
[ { "id":"1", "name":"政治学科1", "sfxj":"true", "sjId":"", "sjName":"", "cj":"1", "data": [ { "id":"3", "name":"历史专业1", "sfxj":"true", "sjId":"1", "sjName":"政治学科1", "cj":"2", "data": [ { "id":"6", "name":"历史班级1", "sfxj":"true", "sjId":"3", "sjName":"历史专业1", "cj":"3", "data": [ { "id":"10", "name":"111", "sfxj":"false", "sjId":"6", "sjName":"历史班级1", "cj":"4", "data":[] }, { "id":"11", "name":"222", "sfxj":"false", "sjId":"6", "sjName":"历史班级1", "cj":"4", "data":[] },
所以需要在后台的时候把这种json的样式拼接出来 由于开始不知道配置了spring的json转化 所以使用了纯StringBuffer的拼接方法,十分麻烦
后来看见配置中有配置
<ref bean="mappingJacksonHttpMessageConverter"/> <!-- JSON转换器 -->
所以就直接在controller层返回一个List map泛型的就OK了
然后为了减少sql的压力 使用一条sql进行四表联查 让所有的数据显示在了一个结果集中 后来发现操作每一条结果来进行判断 遍历有点麻烦 最后也没能实现 所以由于工期有限 换成了四条sql分别查询四个列表出来 进行判断插入
具体实现如下
for(int k=0 ; k<queryAllMapper.getXk().size();k++){ HashMap<Object,Object> xkmap = new HashMap<>(); xkmap.put("id",queryAllMapper.getXk().get(k).getXkid()) ; xkmap.put("name",queryAllMapper.getXk().get(k).getXkmc()); xkmap.put("sfxj",queryAllMapper.getXk().get(k).getSfxj()); xkmap.put("sjid",""); xkmap.put("sjname",""); xkmap.put("cj",queryAllMapper.getXk().get(k).getCj()); xkmap.put("data",new ArrayList<>()); Xklist.add(xkmap); System.out.println(Xklist); } for(int k=0 ; k<queryAllMapper.getZy().size();k++){ HashMap<Object,Object> zymap = new HashMap<>(); zymap.put("id",queryAllMapper.getZy().get(k).getZyid()) ; zymap.put("name",queryAllMapper.getZy().get(k).getZymc()); zymap.put("sfxj",queryAllMapper.getZy().get(k).getSfxj()); zymap.put("sjid",queryAllMapper.getZy().get(k).getXkid()); zymap.put("sjname",queryByIdMapper.getXkmc(queryAllMapper.getZy().get(k).getXkid())); zymap.put("cj",queryAllMapper.getZy().get(k).getCj()); zymap.put("data",new ArrayList<>()); Zylist.add(zymap); } for(int k=0 ; k<queryAllMapper.getBj().size();k++){ HashMap<Object,Object> bjmap = new HashMap<>(); bjmap.put("id",queryAllMapper.getBj().get(k).getBjid()) ; bjmap.put("name",queryAllMapper.getBj().get(k).getBjmc()); bjmap.put("sfxj",queryAllMapper.getBj().get(k).getSfxj()); bjmap.put("sjid",queryAllMapper.getBj().get(k).getZyid()); bjmap.put("sjname",queryByIdMapper.getZymc(queryAllMapper.getBj().get(k).getZyid())); bjmap.put("cj",queryAllMapper.getBj().get(k).getCj()); bjmap.put("data",new ArrayList<>()); Bjlist.add(bjmap); } for(int k=0 ; k<queryAllMapper.getXs().size();k++){ HashMap<Object,Object> xsmap = new HashMap<>(); xsmap.put("id",queryAllMapper.getXs().get(k).getXsid()) ; xsmap.put("name",queryAllMapper.getXs().get(k).getXm()); xsmap.put("sfxj",queryAllMapper.getXs().get(k).getSfxj()); xsmap.put("sjid",queryAllMapper.getXs().get(k).getBjid()); xsmap.put("sjname",queryByIdMapper.getBjmc(queryAllMapper.getXs().get(k).getBjid())); xsmap.put("cj",queryAllMapper.getXs().get(k).getCj()); xsmap.put("data",new ArrayList<>()); Xslist.add(xsmap); } for(int i=0;i<Bjlist.size();i++){ for(int j=0;j<Xslist.size();j++){ if( Bjlist.get(i).get("id").equals(Xslist.get(j).get("sjid"))){ ((ArrayList) Bjlist.get(i).get("data")).add(Xslist.get(j)); Bjlist.get(i).put("sfxj","true"); } } } for(int i=0;i<Zylist.size();i++){ for(int j=0;j<Bjlist.size();j++){ if( Zylist.get(i).get("id").equals(Bjlist.get(j).get("sjid"))){ ((ArrayList) Zylist.get(i).get("data")).add(Bjlist.get(j)); Zylist.get(i).put("sfxj","true"); } } } for(int i=0;i<Xklist.size();i++){ for(int j=0;j<Zylist.size();j++){ if( Xklist.get(i).get("id").equals(Zylist.get(j).get("sjid"))){ ((ArrayList) Xklist.get(i).get("data")).add(Zylist.get(j)); Xklist.get(i).put("sfxj","true"); } } }Xk:学科
Zy:专业
Bj:班级
Xs:学生
这样使用List加上map就能实现了
将json的数组看做是一个list list中放入的map就相当于json对象 的key value形式
然后有下级的情况下 又将下级的list放入上级的data 中
这样就能实现了 在网上也看见了用节点去做的 有兴趣的可以了解一下