需求:獲取權限樹狀菜單,如圖:
數據結構
public class PermissionVO{
private Integer id;
private String parentId;
private String name;
@JSONField(serialize = false)
private String url;
@JSONField(serialize = false)
private String icon;
private String isMenu;
private Integer sort;
private List<PermissionVO> children;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getParentId() {
return parentId;
}
public void setParentId(String parentId) {
this.parentId = parentId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getIcon() {
return icon;
}
public void setIcon(String icon) {
this.icon = icon;
}
public String getMenu() {
return isMenu;
}
public void setMenu(String menu) {
isMenu = menu;
}
public Integer getSort() {
return sort;
}
public void setSort(Integer sort) {
this.sort = sort;
}
public List<PermissionVO> getList() {
return children;
}
public void setList(List<PermissionVO> childrenList) {
this.children = childrenList;
}
@Override
public String toString() {
return "PermissionVO{" +
"id=" + id +
", parentId=" + parentId +
", name='" + name + '\'' +
", url='" + url + '\'' +
", icon='" + icon + '\'' +
", isMenu=" + isMenu +
", sort=" + sort +
'}';
}
}
數據庫查詢出的數據
mapper.xml
<resultMap id="BaseResultMap" type="com.smart.sso.server.model.PermissionVO">
<id column="id" jdbcType="INTEGER" property="id" />
<result column="parentId" jdbcType="VARCHAR" property="parentId" />
<result column="name" jdbcType="VARCHAR" property="name" />
<result column="url" jdbcType="VARCHAR" property="url" />
<result column="icon" jdbcType="VARCHAR" property="icon" />
<result column="isMenu" jdbcType="VARCHAR" property="isMenu" />
<result column="sort" jdbcType="INTEGER" property="sort" />
<collection property="children" ofType="com.smart.sso.server.model.PermissionVO" column="id" select="com.smart.sso.server.dao.PermissionDao.getListById"/>
</resultMap>
<select id="getListById" parameterType="map" resultMap="BaseResultMap">
<!--sql語句省略-->
</select>
工具類
public class TreeUtil {
private List<PermissionVO> menuList;
public List<Object> list = new ArrayList<>();
public List<Object> treeMenu(List<PermissionVO> allMenuList) {
this.menuList = allMenuList;
allMenuList.forEach(treeNode -> {
Map<String, Object> mapArray = new LinkedHashMap<>();
if (null == treeNode.getParentId() || "".equals(treeNode.getParentId())) {
setTreeMap(mapArray, treeNode);
list.add(mapArray);
}
});
return list;
}
private void setTreeMap(Map<String, Object> mapArray, PermissionVO treeNode) {
mapArray.put("id", treeNode.getId());
mapArray.put("parentId", treeNode.getParentId());
mapArray.put("name", treeNode.getName());
mapArray.put("url", treeNode.getUrl());
mapArray.put("icon", treeNode.getIcon());
mapArray.put("isMenu", treeNode.getMenu());
mapArray.put("sort", treeNode.getSort());
mapArray.put("children", menuChild(treeNode.getId().toString()));
}
private List<?> menuChild(String parentId) {
List<Object> lists = new ArrayList<>();
menuList.forEach(treeNode -> {
Map<String, Object> childArray = new LinkedHashMap<>();
if (null != treeNode.getParentId() && !"".equals(treeNode.getParentId())) {
if (treeNode.getParentId().equals(parentId)) {
setTreeMap(childArray, treeNode);
lists.add(childArray);
}
}
});
return lists;
}
}
調用工具類
List<PermissionVO> permissionVOList = permissionService.getListById(appCode, user.getId());
if (0 < permissionVOList.size()) {
TreeUtil treeUtil = new TreeUtil();
List<Object> objects = treeUtil.treeMenu(permissionVOList);
JSONArray treeData = new JSONArray(objects);
}
返回數據