分享一个 树形菜单,一般生成树形菜单都是通过递归遍历,或者 通过 NOSQL 存储
此篇 介绍一个 递归 树形菜单的 工具类
废话不多说 上代码
/**
* @author 作者 : 小布
* @version 创建时间 : 2019年3月18日 下午3:01:27
* @explain 类说明 : 树形菜单
*/
public final class TreeUtils {
public static Map<String,Object> mapArray2 = new LinkedHashMap<String, Object>();
public List<MedicineDictionary> menuCommon2;
public List<Object> list2 = new ArrayList<Object>();
public List<Object> menuList2(List<MedicineDictionary> menu2){
this.menuCommon2 = menu2;
for (MedicineDictionary x : menu2) {
Map<String,Object> mapArr2 = new LinkedHashMap<String, Object>();
if(x.getFid() == 0 || x.getFid().equals(0)){
mapArr2.put("id", x.getId());
mapArr2.put("fid", x.getFid());
mapArr2.put("name", x.getName());
mapArr2.put("childList", menuChild2(x.getId()));
list2.add(mapArr2);
}
}
return list2;
}
public List<?> menuChild2(Integer id){
List<Object> lists2 = new ArrayList<Object>();
for(MedicineDictionary a:menuCommon2){
Map<String,Object> childArray2 = new LinkedHashMap<String, Object>();
if(a.getFid() == id || a.getFid().equals(id)){
childArray2.put("id", a.getId());
childArray2.put("fid", a.getFid());
childArray2.put("name", a.getName());
childArray2.put("childList", menuChild2(a.getId()));
lists2.add(childArray2);
}
}
return lists2;
}
实体类 也就存储 简单数据
/**
* @author 作者 : 小布
* @version 创建时间 : 2019年4月29日 下午4:10:20
* @explain 类说明 :
*/
public class MedicineDictionary {
private Integer id;
private Integer fid;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getFid() {
return fid;
}
public void setFid(Integer fid) {
this.fid = fid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
最后调用,写一个查询所有数据的接口即可
List<MedicineDictionary> list = mapper.queryAll();//查询所有数据的接口
TreeUtils tree = new TreeUtils();
List<Object> menuList = tree.menuList2(list);//menuList 树形JSON
数据库 存储的数据 按照 id fid 的结构存储即可