参考文件: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>