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

方法1:

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

第一步创建树形数据Bean

public class DeptTree {
private String id;
private String name;
private List<DeptTree> 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<DeptTree> getChildrenList() {
return childrenList;
}
public void setChildrenList(List<DeptTree> childrenList) {
this.childrenList = childrenList;
}
}

 

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

<!-- 初始化部门树 -->
<resultMap type="com.lilosoft.cospace.sys.bean.DeptTree" id="deptTree">
<result column="DEPT_ID" property="id" javaType="java.lang.String" />
<result column="DEPT_NAME" property="name" javaType="java.lang.String" />
<collection column="DEPT_ID" property="childrenList" ofType="DeptTree" javaType="java.util.ArrayList" select="selectDeptChildrenById"/>
</resultMap>
<!-- 根据parent_id,先查出所有一级部门 -->
<select id="queryDeptTreeList" resultMap="deptTree">
select dept_id,dept_name from sys_dept  where is_use='0' and parent_id= (select dept_id from sys_dept where parent_id='-1' and is_use='0')
</select>
<!-- 再递归查询出一级部门下的所有子部门 -->
<select id="selectDeptChildrenById" resultMap="deptTree" parameterType="string">
select dept_id,dept_name from sys_dept  where is_use='0' and parent_id= #{DEPT_ID}
</select>

 

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

List<DeptTree> dList=deptService.queryDeptTreeList();

(2) java 递归方法处理:

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

@Test

public void testQueryMenuList() {

// 原始的数据 List<Menu> rootMenu = menuDao.queryMenuList(null); // 查看结果

for (Menu menu : rootMenu) {

System.out.println(menu);

}

// 最后的结果

List<Menu> menuList = new ArrayList<Menu>();

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

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<String,Object> jsonMap = new HashMap<>();

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

}

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

private List<Menu> getChild(String id, List<Menu> rootMenu) {

// 子菜单

List<Menu> 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;

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值