对于菜单,以及省市区联动这种数据, 要从数据库取出来传给前端,然后前端通过ztree之类的框架进行展示,那么这里我写了一个将数据库中的数据,转成dto的树状结构的工具方法
代码
这里用了lombok框架,所以需要导lombok依赖
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.20</version> </dependency>
讯享网
这样只需要一个@Data注解就可以省去getter和setter了
idea还需要加一个插件LomBok plugin
1.数据库对应的实体类
讯享网package com.zgd.demo.entity; import lombok.Data; / * 菜单 * @author zgd */ @Data public class Menu {
private Integer id; private String name; private Integer parentId; private Integer level; public Menu(Integer id, String name, Integer parentId, Integer level) { this.id = id; this.name = name; this.parentId = parentId; this.level = level; } }
2. menu的dto类
package com.zgd.demo.dto; import lombok.Data; import java.util.List; / * menu的dto类 * @author zgd */ @Data public class MenuDto {
private Integer id; private String name; private Integer parentId; private Integer level; private List<MenuDto> children; }
4.工具类
讯享网package com.zgd.demo.util.bean; import com.zgd.demo.dto.MenuDto; import com.zgd.demo.dto.UserDto; import com.zgd.demo.entity.Menu; import com.zgd.demo.entity.User; import org.springframework.beans.BeanUtils; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; / * 将数据库查出来的list数据抓成树状结构 * @author zgd */ public class List2TreeUtil {
/ * 根级父ID */ private static final Integer ROOT_PARENT_ID = 0; / * 将普通的entity的集合转成存在树状结构的集合 * @param list * @return */ public static List<MenuDto> getDtoTreeList(List<Menu> list){ List<MenuDto> dtos = new ArrayList<>(); if (list == null || list.isEmpty()) { return dtos; } for (Menu menu : list) { if (ROOT_PARENT_ID.equals(menu.getParentId())){ //找到顶层目录 MenuDto menuDto = new MenuDto(); //将实体类的数据转成dto BeanUtils.copyProperties(menu,menuDto); //获取该实体类下的所有子级 dtos.add(findChildren(menuDto,list)); } } return dtos; } / * 获取dto类下面的所有子级,存到dto中的children中 * @param menuDto * @param list * @return */ private static MenuDto findChildren(MenuDto menuDto, List<Menu> list) { for (Menu menu : list) { if (menuDto.getId().equals(menu.getParentId())){ //此时menu是menuDto下的子级 if (menuDto.getChildren() == null){ menuDto.setChildren(new ArrayList<MenuDto>()); } MenuDto dto = new MenuDto(); BeanUtils.copyProperties(menu,dto); //递归 menuDto.getChildren().add(findChildren(dto,list)); } } return menuDto; } }
4.测试
package com.zgd.demo; import com.google.gson.Gson; import com.zgd.demo.entity.Menu; import com.zgd.demo.util.bean.List2TreeUtil; import jdk.nashorn.internal.runtime.linker.LinkerCallSite; import java.util.ArrayList; import java.util.List; / * 运行demo * @author zgd */ public class DemoTest { public static void main(String[] args) { Gson gson = new Gson(); List<Menu> list = new ArrayList<>(); list.add(new Menu(1,"顶级目录",0,1)); list.add(new Menu(2,"二级目录-a",1,2)); list.add(new Menu(3,"二级目录-b",1,2)); list.add(new Menu(4,"三级目录-a-a",2,3)); list.add(new Menu(5,"三级目录-a-b",2,3)); list.add(new Menu(6,"三级目录-a-c",2,3)); list.add(new Menu(7,"三级目录-b-a",3,3)); System.out.println(gson.toJson(List2TreeUtil.getDtoTreeList(list))); } }
将打印出来的字符串进行格式化后


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/13610.html