java--关于树的数据库查询方法

来源:互联网 发布:教育信息化数据填报 编辑:程序博客网 时间:2024/05/20 06:27

本篇主要讲了关于一个表存放树的数据库表的查询方法:
利用JSON查询:
首先从数据库查询该表的所有信息:

public JSONArray fromatAll() {        JSONArray jsonArray = new JSONArray();        List<Map<String,Object>> regList=jdbcTemplate.queryForList("select id,name ,father_id as parentId from bas_mediservicetype");        for(Map<String,Object> map:regList){            jsonArray.add(map);        }        return jsonArray;    }

使用JSONArray对象递归遍历得到树:

public JSONArray treeMenuList(JSONArray menuList, int parentId) {         JSONArray childMenu = new JSONArray();              for (Object object : menuList) {                  JSONObject jsonMenu = JSONObject.fromObject(object);                  int menuId = jsonMenu.getInt("id");                  int pid = jsonMenu.getInt("parentId");                  if (parentId == pid) {                      JSONArray c_node = treeMenuList(menuList, menuId);                      jsonMenu.put("nodes", c_node);                    childMenu.add(jsonMenu);                  }              }              return childMenu;      }

最后调用:

JSONArray jsonArray = costItemervice.treeMenuList(this.costItemDao.fromatAll(), 0);

利用LIst和Map对象只查询叶子节点的信息:

//costItemService中实现:static List<Map<String,Object>> leafssList = new ArrayList<Map<String,Object>>();//该静态变量用于添加信息中的叶子节点    /**     * 通过递归得到医疗服务分类信息中的叶子节点信息     * @param basMstList     * @param parentId     * @return     */    public List<Map<String, Object>> leafList1(List<Map<String, Object>> basMstList,            int parentId) {        List leafsList = new ArrayList<>();        for (Map<String,Object> basMstMap : basMstList) {            int menuId = Integer.parseInt(( basMstMap.get("id")).toString());            int pid = Integer.parseInt(( basMstMap.get("parentId")).toString());            if(parentId==pid){                List<Map<String, Object>> leafLis = leafList1(basMstList,menuId);                if(leafLis.isEmpty()){                    leafsList.add(basMstMap);//递归后返回值到leafLis后判断该节点后续节点是否有值,据此保存后续节点为空也就是叶子节点的信息                    leafssList.add(basMstMap);//保存信息到静态变量中                }            }        }        return leafsList;    }    /**     * 返回信息叶子节点的信息     */    public List<Map<String, Object>> leafList (List<Map<String, Object>> basMstList,            int parentId){        leafList1(basMstList,parentId);        return leafssList;    }//costItemDao中sql查询public List<Map<String, Object>> queryBasMediservicetype() {        List<Map<String, Object>> basMstList = jdbcTemplate.queryForList("select id,name ,father_id as parentId from bas_mediservicetype");        return basMstList;    }//调用:costItemService.leafList(costItemDao.queryBasMediservicetype(), 1)

测试显示成功,但是刷新页面之后,再次调用该方法时leafsslist不是重新定义而是接着在后面增加数据,static改成private错误一样。
然后我在方法中增加了一条remove语句

/**     * 返回信息叶子节点的信息     */    public List<Map<String, Object>> leafList (List<Map<String, Object>> basMstList,            int parentId){        leafssList.removeAll(leafssList);        leafList1(basMstList,parentId);        return leafssList;    }
0 0
原创粉丝点击