操作数据库树形结构java工具类
一、工具类
import com.abc5w.esgreportapi.model.ModulesModel; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; /** * <树形结构工具类> * * @author zxx * @date 2022-05-05 16:05 * @since 1.0.0 */ public class TreeUtil { /** * * @param modules 所有结果集 * @param pid 父节点id */ public static List<Map<String, Object>> menuList(long pid, List<ModulesModel> modules){ List<ModulesModel> modulesList = modules; List<Map<String, Object>> list = new ArrayList<>(); // 遍历结果集,使用当前pid节点为顶级节点,调用menuChild,递归遍历所有子节点 for (ModulesModel result : modules) { Map<String, Object> mapArr = new LinkedHashMap<>(); if(pid == result.getId()){ mapArr.put("id", result.getId()); mapArr.put("moduleName", result.getModuleName()); mapArr.put("moduleCode", result.getModuleCode()); mapArr.put("pid", result.getPid()); //遍历开始 mapArr.put("childList", menuChild(result.getId(), modulesList)); list.add(mapArr); } } return list; } /** * 获取子菜单 * @param id 节点id */ private static List<?> menuChild(Long id, List<ModulesModel> modulesList){ List<Object> lists = new ArrayList<>(); // 继续遍历menu for(ModulesModel result : modulesList){ Map<String,Object> childArray = new LinkedHashMap<String, Object>(); //找到父ID等于父节点ID的子节点 if(result.getPid() == id){ childArray.put("id", result.getId()); childArray.put("moduleName", result.getModuleName()); childArray.put("moduleCode", result.getModuleCode()); childArray.put("pid", result.getPid()); //向下递归 childArray.put("childList", menuChild(result.getId(), modulesList)); lists.add(childArray); } } return lists; } }
二、工具类相关依赖类
import lombok.Data; /** * <组件model> * * @author zxx * @date 2022-05-05 15:40 * @since 1.0.0 */ @Data public class ModulesModel { private long id; private String moduleName; private String moduleCode; private long pid; }
三、数据库数据格式

四、工具类返回结果


浙公网安备 33010602011771号