`

树状结构Tree

阅读更多
树状结构Tree



一、部门类Org.java
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;

@Entity
public class Org {
	private int id;
	private String name;
	private Set<Org> children = new HashSet<Org>();
	private Org parent;
	@Id
	@GeneratedValue
	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(cascade=CascadeType.ALL, mappedBy="parent" ,fetche=FetcheType.EAGER)
	public Set<Org> getChildren() {
		return children;
	}
	public void setChildren(Set<Org> children) {
		this.children = children;
	}
	
	@ManyToOne
	@JoinColumn(name="parent_id")
	public Org getParent() {
		return parent;
	}
	public void setParent(Org parent) {
		this.parent = parent;
	}
}




二、递归输出

import java.util.Map;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

public class HibernateTreeTest {
	private static SessionFactory sessionFactory;
	
	@BeforeClass
	public static void beforeClass() {
		new SchemaExport(new AnnotationConfiguration().configure()).create(false, true);
		sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
	}
	@AfterClass
	public static void afterClass() {
		sessionFactory.close();
	}
	
	@Test
	public void testSave() {
		Org o = new Org();
		o.setName("总公司");
		Org o1 = new Org();
		o1.setName("分公司1");
		Org o2 = new Org();
		o2.setName("分公司2");
		Org o11 = new Org();
		o11.setName("分公司1下部门1");
		Org o12 = new Org();
		o12.setName("分公司1下部门2");
		
		o.getChildren().add(o1);
		o.getChildren().add(o2);
		o1.getChildren().add(o11);
		o1.getChildren().add(o12);
		o11.setParent(o1);
		o12.setParent(o1);
		o1.setParent(o);
		o2.setParent(o);
				
		
		Session session = sessionFactory.openSession();
		session.beginTransaction();
		session.save(o);
	
		session.getTransaction().commit();
		session.close();
	}
	@Test
	public void testLoad() {
		testSave();
		Session session = sessionFactory.openSession();
		session.beginTransaction();
		Org o = (Org)session.load(Org.class, 1);
		print(o, 0);
		session.getTransaction().commit();
		session.close();
		
	}
	
	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.getChildren()) {
			print(child, level+1);
		}
	}
	@Test
	public void testSchemaExport() {
		new SchemaExport(new AnnotationConfiguration().configure()).create(false, true);
	}
	
	
	public static void main(String[] args) {
		beforeClass();
	}
}

分享到:
评论

相关推荐

    list转树状结构通用工具类

    "list转树状结构"就是其中的一种常见需求,特别是在数据可视化、数据库查询优化或者构建层次化菜单等场景下。本篇将深入探讨如何实现一个非递归的、支持多个顶级节点的通用工具类来完成这一任务。 首先,我们需要...

    树状结构的简要介绍与分析

    树状结构是一种重要的数据结构,它在计算机科学中被广泛应用于各种问题的解决,比如文件系统、数据库索引、编译器语法分析等。在C语言中,理解并实现树状结构是编程能力的重要体现。 首先,我们来看树状结构的基本...

    树状结构插件 z-tree 功能强大, 便于操作

    在Web开发中,数据的层级展示经常需要用到树状结构。z-Tree 是一个高效且功能丰富的JavaScript树状插件,适用于构建动态、交互式的树形视图。该插件以其简洁的API、强大的自定义功能以及良好的性能表现,深受开发者...

    解析Json生成树状结构(无限级)

    通过解析Json数据生成树状结构 1、使用newtonsoft.json解析json 2、无限级 3、父子节点联动

    本体解析为树状结构的代码

    将本体解析为树状结构是一种常见的可视化方式,可以帮助用户更好地理解本体的层次结构和概念之间的关系。树状结构通常以节点表示概念,以边表示概念之间的关系。 ### 使用 Jena 构建本体树状结构 #### 1. 导入必要...

    一个树状结构列表.zip

    标题 "一个树状结构列表.zip" 提供的信息表明,这个压缩包包含了一个实现树状结构列表的开源项目。树状结构列表是一种数据呈现方式,它模仿了自然界中的树形结构,用于表示层次关系的数据。在计算机科学中,尤其是在...

    生成可拖拽的树状结构,节点可以通过拖拽移动,插入

    在Swing中,我们可以利用JTree创建一个可拖放(Drag and Drop)的树状结构,使得用户能够通过简单的拖拽操作来移动或插入节点。这种功能在数据组织和展示时非常实用,例如在文件系统管理、项目管理或复杂数据结构的...

    使用jsTree实现js树形结构

    **jsTree:构建前端树形结构的利器** jsTree 是一个强大的 JavaScript 库,专用于在 Web 页面上创建交互式的树形结构。它基于纯 JavaScript 编写,无需依赖其他库,因此对于初学者和有经验的开发者来说,都是一个...

    z-tree超级好的树状组件

    z-tree是一款优秀的JavaScript树状组件,它专为满足这种需求而设计,提供丰富的功能和高度的可定制性,使得开发者能够轻松地在网页中构建出美观且实用的树状结构。 **1. 功能特性** z-tree具备以下关键特性: - *...

    树状结构Demo(Vue-Ztree)--包含前后端.zip

    基于Vue-Ztree-2.0实现树状结构的展示 启动步骤: 1.cmd至前端项目根目录执行“npm install”命令 2.“npm start”命令启动项目 后端项目:tree 基于springboot、mybaits-plus、mysql实现树状结构 启动步骤: 1.mvn...

    各种树状结构JS特效

    在IT领域,特别是前端开发中,"各种树状结构JS特效"是一个常见的需求,用于构建交互式的、层次化的用户界面。树状结构是一种数据表示形式,它由节点组成,每个节点可以有零个或多个子节点,形成了一个层级关系。在...

    jsp实现树状结构源码

    树状结构(Tree Structure)在计算机科学中被广泛应用于数据组织,尤其在UI设计中,常用来表示层次关系的数据,例如文件系统、组织结构等。在Web应用中,树形结构可以用于展现目录层级、导航菜单、权限管理等场景。`...

    开源Tree树状菜单HTML+Javascript兼容各浏览器

    在IT领域,树状菜单是一种常见的用户界面元素,它用于以层级结构展示数据,使得用户可以方便地导航和浏览复杂的目录或信息结构。本资源"开源Tree树状菜单HTML+Javascript兼容各浏览器"提供了一个解决方案,它利用...

    react-virtualized-sticky-tree:一个React组件,用于有效地渲染树状结构并支持位置

    一个React组件,用于有效地渲染树状结构并支持位置:粘性。 react-virtualized-sticky-tree使用类似的API进行 。 演示版 入门 npm install react-virtualized-sticky-tree --save 用法 基本范例 import { ...

    树状结构例子

    树状结构在信息技术中是一种非常基础且重要的数据结构,它被广泛应用于计算机科学的各个领域,如文件系统、数据库索引、编译器设计、图形学、算法设计等。在这个"树形结构案例"中,我们可以深入理解树的定义、特性和...

    JavaScript实现树状结构展现

    在JavaScript编程中,树状结构是一种常见的数据组织方式,它模拟了自然界中的树形关系,节点之间通过父子关系连接。这种结构广泛应用于文件系统、网页DOM(文档对象模型)以及组织复杂的逻辑结构等场景。本篇文章将...

    android树状结构图,多层打开文件夹

    1. **树状结构(Tree Structure)**: 树状结构是一种数据组织方式,模拟自然界中的树,其中每个节点(Node)可以有零个或多个子节点。在计算机科学中,这种结构常用于表示具有层次关系的数据,如文件系统、组织架构...

    dtree树状结构插件

    **dtree树状结构插件** 是一种用于在网页中展示层次化数据的工具,它以树形结构呈现信息,使用户能够清晰地理解和导航复杂的层级关系。在网页设计和开发中,dtree插件因其易用性和免费特性而受到欢迎。 **dtree的...

    基于 PHP 实现的数组转换成树状结构的帮助类

    【项目介绍】:将 数组转换成树状结构 的帮助类 $TreeBuild = new TreeBuild($array); //初始化 $TreeBuild-&gt;sort = true; //是否排序 $TreeBuild-&gt;sortField = 'sort'; //排序字段 $TreeBuild-&gt;topId='0'; //...

    安卓Android源码——使用listView实现的树状结构.zip

    本项目通过ListView实现了树状结构,这在展示层级关系或者分类信息时非常实用,例如文件系统、组织结构或者菜单等。 首先,要理解在Android中如何使用ListView,关键在于Adapter的使用。Adapter是连接数据源和...

Global site tag (gtag.js) - Google Analytics