树形菜单数据映射到实体中

方法1:

(1)运用mybatis的自带映射collection :

第一步创建树形数据Bean

public class DeptTree {
private String id;
private String name;
private List childrenList;//子节点
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List getChildrenList() {
return childrenList;
}
public void setChildrenList(List childrenList) {
this.childrenList = childrenList;
}
}

 

第二步:mybatis相应的sql.xml文件配置










 

第三步:(dao和service层代码略)控制器调用

List dList=deptService.queryDeptTreeList();

(2) java 递归方法处理:

private final Gson gson = new GsonBuilder().disableHtmlEscaping().create();

@Test

public void testQueryMenuList() {

// 原始的数据 List

rootMenu = menuDao.queryMenuList(null); // 查看结果

for (Menu menu : rootMenu) {

System.out.println(menu);

}

// 最后的结果

List

menuList = new ArrayList();

// 先找到所有的一级菜单

for (int i = 0; i < rootMenu.size(); i++) {

// 一级菜单没有parentId

if (StringUtils.isBlank(rootMenu.get(i).getParentId())) {

menuList.add(rootMenu.get(i));

}

} // 为一级菜单设置子菜单,getChild是递归调用的

for (Menu menu : menuList) {

menu.setChildMenus(getChild(menu.getId(), rootMenu));

}

Map jsonMap = new HashMap<>();

jsonMap.put("menu", menuList); System.out.println(gson.toJson(jsonMap));

}

/** * 递归查找子菜单 * * @param id * 当前菜单id * @param rootMenu * 要查找的列表 * @return */

private List

getChild(String id, List rootMenu) {

// 子菜单

List

childList = new ArrayList<>();

for (Menu menu : rootMenu) {

// 遍历所有节点,将父菜单id与传过来的id比较

if (StringUtils.isNotBlank(menu.getParentId())) {

if (menu.getParentId().equals(id)) {

childList.add(menu);

} } }

// 把子菜单的子菜单再循环一遍

for (Menu menu : childList) {

// 没有url子菜单还有子菜单

if (StringUtils.isBlank(menu.getUrl())) {

// 递归 menu.setChildMenus(getChild(menu.getId(), rootMenu));

} } // 递归退出条件 if (childList.size() == 0)

{

return null;

}

return childList;

}

你可能感兴趣的:(递归)