java实现树形结构

参考文件:https://www.cnblogs.com/zhizhao/p/9956158.html

 public ResponseEntity getRoomTree() {

     log.info("开始获取room节点树信息!!!");

 //    log.info( Integer.parseInt("111") );
/*     List<TreeNode> roomEntityList =  roomTreeMapper.getAll();
     log.info("总记录数 :"+ roomEntityList.size() ) ;
     Map<TreeNode , List<TreeNode>> resultLists = new HashMap<> ();
     List<TreeNode> resultList = new ArrayList<>();
     for (TreeNode  parRoom :roomEntityList
     ) {
         if( parRoom.getRoomId()  !=  null ){


             TreeNode sonRoom = getTree( parRoom ) ;
             if(StringUtil.isNotEmpty(sonRoom)){
                 resultList.add( sonRoom ) ;
             }
         }
     }
     */
     try{

         // 查询所有的许可数据
         List<TreeNode> roomEntityList =  roomTreeMapper.getAll();
         List<Map<String,Object>> data = new ArrayList<>();
         Map<String,Object> map = new HashMap<>();
         for (TreeNode p : roomEntityList) {
             map = new HashMap<>();
             map.put("id",p.getRoomId());
             map.put("pid",p.getParentId());
             map.put("name",p.getRoomName());
             data.add(map) ;
         }
         System.out.println("--------"+JSON.toJSONString(data));
         JSONArray result = listToTree(JSONArray.parseArray(JSON.toJSONString(data)),"id","pid","children");
         System.out.println(JSON.toJSONString(result));

         log.info("获取父子节点完毕 :" + roomEntityList.size() ) ;
         log.info("获取=========== :" + roomEntityList.toString()) ;
     }catch (Exception ex ){
         log.info( ex.toString() ) ;
     }
  //


     return null ;
 }
/**

 - listToTree
 - <p>方法说明<p>
 - 将JSONArray数组转为树状结构
 - @param arr 需要转化的数据
 - @param id 数据唯一的标识键值
 - @param pid 父id唯一标识键值
 - @param child 子节点键值
 - @return JSONArray
 */
public static JSONArray listToTree(JSONArray arr,String id,String pid,String child){
    JSONArray r = new JSONArray();
    JSONObject hash = new JSONObject();
    //将数组转为Object的形式,key为数组中的id
    for(int i=0;i<arr.size();i++){
        JSONObject json = (JSONObject) arr.get(i);
        hash.put(json.getString(id), json);
    }
    //遍历结果集
    for(int j=0;j<arr.size();j++){
        //单条记录
        JSONObject aVal = (JSONObject) arr.get(j);
        //在hash中取出key为单条记录中pid的值
        JSONObject hashVP = (JSONObject) hash.get(aVal.get(pid).toString());
        //如果记录的pid存在,则说明它有父节点,将她添加到孩子节点的集合中
        if(hashVP!=null){
            //检查是否有child属性
            if(hashVP.get(child)!=null){
                JSONArray ch = (JSONArray) hashVP.get(child);
                ch.add(aVal);
                hashVP.put(child, ch);
            }else{
                JSONArray ch = new JSONArray();
                ch.add(aVal);
                hashVP.put(child, ch);
            }
        }else{
            r.add(aVal);
        }
    }
    return r;
}

mybatis中sql配置

数据库为SQL SERVER

获取树形结构:

<mapper namespace="com.hwd.wisdomcloud.entrance.mapper.RoomTreeMapper">
    <!-- 配置结果集-->


    <select id="getAll" resultType="TreeNode" statementType="PREPARED" >
        with f as
        (
        SELECT   room_id, name ,type , parent_id  from pls_room where parent_id like '00000'
        union all
        SELECT  a.room_id, a.name ,a.type , a.parent_id from pls_room as a inner join f as b on a.parent_id=b.room_id AND  a.type <![CDATA[ <> ]]>'3'
        )
        select room_id as roomId ,name as roomName ,type,parent_id  as parentId FROM  f   ;

    </select>

根据子节点,获取父节点分支:

<select id="getAllParentDptNode" resultType="TreeNode" statementType="PREPARED" parameterType="String" >
    WITH  partents AS
    (
    SELECT  DptSysID, DptName , DptParentSysID FROM dbo.RS_Dpt  WHERE  DptSysID =#{DptSysID}
    UNION ALL
    (SELECT a.DptSysID , a.DptName  ,a.DptParentSysID FROM  dbo.RS_Dpt  AS  a INNER  JOIN
    partents AS  b ON  a.DptSysID=b.DptParentSysID
    )
    )
    SELECT DptSysID  as roomId , DptName  as roomName , DptParentSysID  as parentId  FROM partents
</select>

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
$(function(){ $.fn.extend({ SimpleTree:function(options){ //初始化参数 var option = $.extend({ click:function(a){ } },options); option.tree=this; /* 在参数对象中添加对当前菜单树的引用,以便在对象中使用该菜单树 */ option._init=function(){ /* * 初始化菜单展开状态,以及分叉节点的样式 */ this.tree.find("ul ul").hide(); /* 隐藏所有子级菜单 */ this.tree.find("ul ul").prev("li").removeClass("open"); /* 移除所有子级菜单父节点的 open 样式 */ this.tree.find("ul ul[show='true']").show(); /* 显示 show 属性为 true 的子级菜单 */ this.tree.find("ul ul[show='true']").prev("li").addClass("open"); /* 添加 show 属性为 true 的子级菜单父节点的 open 样式 */ }/* option._init() End */ /* 设置所有超链接不响应单击事件 */ this.find("a").click(function(){ $(this).parent("li").click(); return false; }); /* 菜单项 接受单击 */ this.find("li").click(function(){ /* * 当单击菜单项 * 1.触发用户自定义的单击事件,将该 标签中的第一个超链接做为参数传递过去 * 2.修改当前菜单项所属的子菜单的显示状态(如果等于 true 将其设置为 false,否则将其设置为 true) * 3.重新初始化菜单 */ option.click($(this).find("a")[0]); /* 触发单击 */ /* * 如果当前节点下面包含子菜单,并且其 show 属性的值为 true,则修改其 show 属性为 false * 否则修改其 show 属性为 true */ /* if($(this).next("ul").attr("show")=="true"){ $(this).next("ul").attr("show","false"); }else{ $(this).next("ul").attr("show","true"); }*/ /* 初始化菜单 */ option._init(); }); /* 设置所有父节点样式 */ this.find("ul").prev("li").addClass("folder"); /* 设置节点“是否包含子节点”属性 */ this.find("li").find("a").attr("hasChild",false); this.find("ul").prev("li").find("a").attr("hasChild",true); /* 初始化菜单 */ option._init(); }/* SimpleTree Function End */ }); });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值