mysql 查询父子关系的-java

查询所有父节点

 public void queryAllParents(Long Id,List list){
    XXXX xxx = getXXX(orgId);
    if(xxx== null){
    return ;
    }
    list.add(Id);
    Long parentId = xxx.getParentId();
    if(parentId != null && parentId.longValue() != 0 && parentId.longValue() != -1){
    queryAllParents(parentId,list);
    }
    }


List list = new ArrayList();\

queryAllParents(1,list);


list 中时由下向上的节点id

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用MyBatis-Plus的递归查询来实现该功能。 首先,在定义对应实体类时,需要添加一个自关联属性,例如: ```java public class TreeNode { private Long id; private Long parentId; private String name; // 自关联属性 @TableField(exist = false) private List<TreeNode> children; // getter 和 setter 略 } ``` 然后,在Mapper接口中,使用递归查询的方式来实现该功能: ```java public interface TreeNodeMapper extends BaseMapper<TreeNode> { /** * 递归查询某个节点的所有子节点 * * @param parentId 父节点id * @return 子节点列表 */ @Select("with recursive cte(id, parent_id, name, path) as (\n" + " select id, parent_id, name, cast(id as char(200)) as path from tree_node where parent_id = #{parentId}\n" + " union all\n" + " select c.id, c.parent_id, c.name, concat(p.path, ',', c.id) as path from tree_node c\n" + " inner join cte p on c.parent_id = p.id\n" + ")\n" + "select * from cte") List<TreeNode> selectChildren(Long parentId); /** * 递归查询某个节点的所有父节点 * * @param id 节点id * @return 父节点列表 */ @Select("with recursive cte(id, parent_id, name, path) as (\n" + " select id, parent_id, name, cast(id as char(200)) as path from tree_node where id = #{id}\n" + " union all\n" + " select p.id, p.parent_id, p.name, concat(p.id, ',', c.path) as path from tree_node p\n" + " inner join cte c on p.id = c.parent_id\n" + ")\n" + "select * from cte") List<TreeNode> selectParents(Long id); } ``` 其中,`selectChildren`方法用于查询某个节点的所有子节点,`selectParents`方法用于查询某个节点的所有父节点。 使用方式如下: ```java @Autowired private TreeNodeMapper treeNodeMapper; public void test() { // 查询id为1的节点的所有子节点 List<TreeNode> children = treeNodeMapper.selectChildren(1L); // 查询id为5的节点的所有父节点 List<TreeNode> parents = treeNodeMapper.selectParents(5L); } ``` 这样就可以使用MyBatis-Plus来实现该功能了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值