java 递归 数据库到json树

直接上代码

  1. 数据结构
    在这里插入图片描述
  2. Java 代码
public class TreeNode implements Serializable {
    /**
     * No: 
     * @fieldName: serialVersionUID
     * @fieldType: long
     * @Description: TODO
     */
    private static final long serialVersionUID = 1L;
    private String id;
    private String text;
    private String pid;
    private List<TreeNode> children = new ArrayList();
    public TreeNode() {
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getText() {
        return text;
    }
    public void setText(String text) {
        this.text = text;
    }
    public String getPid() {
        return pid;
    }
    public void setPid(String pid) {
        this.pid = pid;
    }
    public List<TreeNode> getChildren() {
        return children;
    }
    public void setChildren(List<TreeNode> children) {
        this.children = children;
    }
}

DAO层

@Select("SELECT id, `name` as \"text\", parent_id as \"pid\" FROM sys_office WHERE `parent_id`=#{pid}")
List<TreeNode> getOfficeChildrenList(@Param("pid") String pid);
    
@Select("SELECT id, `name` as \"text\", parent_id as \"pid\" FROM sys_office WHERE `id`=#{id}")
TreeNode getOfficeNode(@Param("id") String id);

Service层 递归函数

public TreeNode officeTree(String id) {
    // 根据id获取节点对象
    TreeNode node = dao.getOfficeNode(id);
    // 查询id下的所有子节点
    List<TreeNode> childTreeNodes = dao.getOfficeChildrenList(id);
    // 遍历子节点
    for (TreeNode child : childTreeNodes) {
        TreeNode n = userTree(child.getId()); // 递归
        node.getChildren().add(n);
    }
    return node;
}

结果:

{
	"id": "1",
	"text": "总部",
	"pid": "0",
	"children": [{
		"id": "2",
		"text": "研发部",
		"pid": "1"
	},
	{
		"id": "3",
		"text": "运维部",
		"pid": "1"
	},
	{
		"id": "4",
		"text": "综合部",
		"pid": "1",
		"children": [{
			"id": "5",
			"text": "科室03",
			"pid": "4"
		},
		{
			"id": "6",
			"text": "科室01",
			"pid": "4"
		},
		{
			"id": "7",
			"text": "科室02",
			"pid": "4"
		}]
	}]
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值