树状结构的操作模型

2 篇文章 0 订阅
1 篇文章 0 订阅

需求分析:

       总公司下有两个分公司 1 和 2,其中,分公司1下又有两个部门 1 和 2 。

1.数状结构的数据库设计

 

树状结构的数据库设计(T_ORG)

ID

Parent_ID

NAME

...

1

NULL

总公司

 

2

1

分公司1

 

3

1

分公司2

 

4

2

分公司1下部门1

 

5

2

分公司1下部门2

 

 

2.Hibernate下的编程设计

Org.java文件,使用Hibernate Annotation

package com.lk.pojo;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

@Entity
@Table(name="M_ORG")
@SequenceGenerator(name="SEQ_NO",sequenceName="SEQ_M_OGR", allocationSize = 1)
public class Org {

	private int id;
	private String name;
	private Set<Org> chilren = new HashSet<Org>();
	private Org parent;
    
	@Id
	@Column(name="SEQ_NO")
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_NO")
	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
 
    
	@OneToMany(mappedBy="parent",cascade=CascadeType.ALL,fetch=FetchType.EAGER)
	public Set<Org> getChilren() {
		return chilren;
	}
    
	public void setChilren(Set<Org> chilren) {
		this.chilren = chilren;
	}
 
    
	@ManyToOne
	@JoinColumn(name="pid")
	public Org getParent() {
		return parent;
	}

	public void setParent(Org parent) {
		this.parent = parent;
	}

}


3.树状结构的遍历显示

遍历树状结构的数据一般采用递归操作,如下:

private void print(Org o, int level) {
		String preStr = "";
		for(int i=0;i<level;i++){
			preStr +="==";
		}
		
		System.out.println(preStr+o.getName());
		for(Org child : o.getChilren()){
			print(child,level+1);
		}
	}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值