`

数据库读取树,并处理成json格式

阅读更多

表结构:

tableName  parentTable

  A                  B

  A                  C

  B                  D

  B                  E

  C                  F

  C                  G

 

展示树:

            A

   B               C

D     E       F       G

 

 

@Controller
public class ViewLevelMetaController {
   
 private Log logger = LogFactory.getLog(this.getClass());
 private StringBuffer nodeStr=new StringBuffer();

 @Autowired
 private ViewLevelMetaService viewLevelMetaService;
 @Autowired
 private TableTreeService tableTreeService;


 @RequestMapping("/metadata/getViewLevelTableCreateInfo.do")
 public String getViewLevelTableCreateInfo(ModelMap model, String table) {
  logger.info("getViewLevelTableCreateInfo");
  
  List<treeNode> nodeList = tableTreeService.getTreeNodeList();
  //当json字符串为空时才输出,防止重复输出
  if("[]".equals(modifyStr(nodeStr.toString()))){
   getTreeNode(nodeList, new treeNode("A","A"));
  }
  
  model.put("treeNodeStr",modifyStr(nodeStr.toString()));
  
  return "metadata/main";
 }

 /**
  * 修饰一下才能满足Json格式 
  * @param nodeStr
  * @return
  */
 public String modifyStr(String nodeStr){
        return ("["+nodeStr+"]").replaceAll(",]", "]");    
    } 

 /**
  * 把树组装成json格式数据
  *     A
  * B      C
  *
  * [{tableName:'A',url:'null',children:[
  *  {tableName:'B',url:'null',children:null},
  *  {tableName:'C',url:'null',children:null}
  *  ]}]
  * 
  * @param treeNodeList
  * @param node
  */
 private void getTreeNode(List<treeNode> treeNodeList, treeNode node){
   if(hasChild(treeNodeList,node)){   
             nodeStr.append("{tableName:"); 
             nodeStr.append("'"+node.getTableName()+"'"); 
             nodeStr.append(",url:"); 
             nodeStr.append("'"+node.getUrl()+"'"); 
             nodeStr.append(",children:[");   
             List<treeNode> childNodeList = getChildList(treeNodeList,node);   
             for(treeNode childNode:childNodeList){
              getTreeNode(treeNodeList,childNode);
             }
             nodeStr.append("]},");   
         }else{   
             nodeStr.append("{tableName:"); 
             nodeStr.append("'"+node.getTableName()+"'");
             nodeStr.append(",url:"); 
             nodeStr.append("'"+node.getUrl()+"'"); 
             nodeStr.append(",children:null},"); 
         } 
 }

 /**
  * 判断是否有子节点 
  * @param list
  * @param node
  * @return
  */
 private boolean hasChild(List<treeNode> list, treeNode node){
     return getChildList(list,node).size()>0?true:false; 
  }

 /**
  * 得到子节点列表 
  * @param list
  * @param node
  * @return
  */
 private List<treeNode> getChildList(List<treeNode> list , treeNode node){ 
  List<treeNode> li = new ArrayList<treeNode>();  
     for(treeNode l:list){
      if(l.getParentTable().equals(node.getTableName())){
       li.add(l);
      }
     }
     return li;    
     } 



}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics