经验+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 @ 2022-08-23 15:28  幻梦1999  阅读(81)  评论(0)    收藏  举报