你 好 啊 ! 陌 生 人 , 希 望 你 能 有 所 收 获 .|

幻梦1999

园龄:5年3个月粉丝:1关注:4

经验+9:Java递归查询子父级表

基于JPA进行演示

原文地址:java递归父子关系菜单 - 苑庆涛 - 博客园 (cnblogs.com)

Entity层

@Entity
@DynamicInsert
@DynamicUpdate
@Data
@Table(name = "t_menu")
public class Menu {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    private Integer parentId;//父id
    private String name;//名称
    @Transient
    private List<Menu> children;//子集

    public Menu generateTree(Integer id, List<Menu> list) {
        Menu root = new Menu();
        //查询根
        for (Menu menu : list) {
            if (menu.getId() == id) {
                root = menu;
            }
        }
        //查询子集
        List<Menu> childList = new ArrayList<>();
        for (Menu node : list) {
            if (node.getParentId() == root.getId()) {
                childList.add(node);
            }
        }
        //子集查询子集
        if (childList != null && childList.size() > 0) {
            for (Menu child : childList) {
                Menu childRoot = generateTree(child.getId(), list);
                if (root.getChildren() == null) {
                    root.setChildren(new ArrayList<>());
                }
                root.getChildren().add(childRoot);
            }
        }
        return root;
    }
}

Dao层

@Repository
public interface MenuRepository extends PagingAndSortingRepository<Menu, Integer>, JpaSpecificationExecutor<Menu>, CrudRepository<Menu, Integer> {

    @Query("from Menu")
    List<Menu> findList();	// 查询表所有数据
}

Controller层

@RestController
public class MenuController {
    @Autowired
    private MenuRepository menuRepository;

    @GetMapping("/getTree")
    public Menu t1() {
        List<Menu> list = menuRepository.findList();
        Menu menu = new Menu().generateTree(0, list);	// 0为根节点id
        return menu;

    }
}
// 返回结果
{
    "id": 0,
    "parentId": -1,
    "name": "虚拟商品",
    "children": [
        {
            "id": 3,
            "parentId": 0,
            "name": "卡密",
            "children": null
        },
        {
            "id": 4,
            "parentId": 0,
            "name": "充值",
            "children": null
        }
    ]
}
posted @   幻梦1999  阅读(74)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起