`
horizonhyg
  • 浏览: 58603 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

学习Hibernate生成目录树

阅读更多
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.bjsxt.hibernate.Node" table="t_node">
        <id name="id">
            <generator class="native"/>
        </id>
        <property name="name"/>
        <property name="level"/>
        <property name="leaf"/>
        <many-to-one name="parent" column="pid"/>
        <set name="children" lazy="extra" inverse="true">
        	<key column="pid"/>
        	<one-to-many class="com.bjsxt.hibernate.Node"/>
        </set>
    </class>
</hibernate-mapping>

在一个表中自身映射,使用一个pid列。多个子节点对应一个父节点(parent),一个父节点对应多个子节点,使用set映射,inverse=true,翻转,在多的一端管理。
NodeManager类:
package cn.com.hibernate;

import java.io.File;
import java.util.Iterator;
import java.util.Set;

import org.hibernate.Session;
import org.hibernate.Transaction;

public class NodeManager {
	
	private static NodeManager nodeManager= null;
	
	public NodeManager(){
		
	}
	
	public static synchronized NodeManager getInstance(){
		
		if(nodeManager==null){
			nodeManager = new NodeManager();
		}
		return nodeManager;
	}
	
	public void createTree(String dir){
		Session session = HibernateUtil.getSession();
		Transaction tx = session.beginTransaction();
		try{
			File file = new File(dir);
			saveTree(file,session,null,0);
			tx.commit();
		}catch(Exception ex){
			ex.printStackTrace();
			tx.rollback();
		}finally{
			HibernateUtil.closeSession(session);
		}
	}
	
	public void saveTree(File file,Session session,Node parent,int level){
		if(file==null||!file.exists()){
			return;
		}
		boolean isLeaf = file.isFile();
		Node node = new Node();
		node.setName(file.getName());
		node.setLeaf(isLeaf);
		node.setParent(parent);
		node.setLevel(level);
		session.save(node);
		File[] subFile = file.listFiles();
		if(subFile!=null && subFile.length!=0){
			for(int i=0;i<subFile.length;i++){
				saveTree(subFile[i],session,node,level+1);
			}
		}
	}
	
	public void printTree(int id){
		Session session = HibernateUtil.getSession();
		Transaction tx = session.beginTransaction();
		try{
			Node root = (Node)session.load(Node.class, 1);
			printNode(root);
			tx.commit();
		}catch(Exception ex){
			ex.printStackTrace();
			tx.rollback();
		}finally{
			HibernateUtil.closeSession(session);
		}
	}
	public void printNode(Node root){
		if(root==null){
			return;
		}
		int level = root.getLevel();
		
		if(level>0){
			for(int i=0;i<level;i++){
				System.out.print("   |");
			}
			System.out.print("--");
		}
		System.out.println(root.getName()+(root.isLeaf()?"":"["+root.getChildren().size()+"]"));
		Set<Node> children = root.getChildren();
		for(Iterator<Node> iter = children.iterator();iter.hasNext();){
			Node node = iter.next();
			printNode(node);
		}
	}
	
}

主要是树的生成和树的遍历。
Test类:
package cn.com.hibernate;

import junit.framework.TestCase;

public class createTreeTest extends TestCase {
	public void testCreateTree(){
		NodeManager.getInstance().createTree("D:\\Myeclipse6.5workspace\\Hibernate_tree\\");
	}
	
	public void testPrintTree(){
		NodeManager.getInstance().printTree(1);
	}
}

分享到:
评论

相关推荐

    hibernate3.2.5.rar

    总之,深入学习Hibernate 3.2.5的源码有助于我们更好地理解和运用这个框架,从而提升开发效率,解决实际问题。通过Eclipse工程的实践,我们可以从源码层面洞悉其内部运作,进一步提升自己的Java开发技能。

    hibernate学习笔记

    ### Hibernate学习笔记 #### 第一个Hibernate项目(hibernate_first) 在进行Hibernate的学习时,首先会接触到的是如何创建一个简单的Hibernate项目。以下是一些关键步骤: 1. **新建Java项目**: - 首先,在...

    Java 开发JSP无限级分类目录树-sorttree项目源码

    在Java开发中,构建无限级分类目录树是常见的需求,特别是在网站内容管理、电商商品分类、文件管理系统等场景。这个"sorttree"项目提供了一种实现这一功能的解决方案。下面我们将详细探讨Java与JSP结合实现无限级...

    HibernateSpringWebTest:Spring+Hiber整合测试 优化成最优配置,并且使用hibernate反向生成

    通过学习和实践这个项目,开发者可以深入了解Spring和Hibernate的整合技巧,掌握如何优化数据库访问性能,以及如何利用Hibernate的反向工程工具提高开发效率。同时,这也是提升Java Web开发技能,特别是ORM技术理解...

    ext+Json+dwr+spring+hibernate整合项目实例与资源

    它提供了一套完整的组件模型,包括表格、树形结构、图表等,用于创建美观且交互性强的用户界面。EXTJS通过Ajax技术与服务器进行数据交换,实现了页面无需刷新即可更新内容的效果。 2. **JSON**: JSON(JavaScript ...

    案例8:Spring整合Spring MVC与Hibernate + EasyUI实现电子商城后台订单管理.docx

    4. **EasyUI**:一个基于jQuery的UI插件集合,可以快速构建丰富的用户界面,包括表格、树形菜单、对话框等组件。 #### 三、项目搭建步骤 1. **项目复制与命名**: - 在第五章的项目`digital-ssh`基础上进行复制...

    jsp代码这是jsp百例的部分例子(92例的lib)(之二)

    在JSP中,可能用于解析和生成语法树。 7. **jboss-cache.jar**:这是JBoss的一个缓存解决方案,用于在分布式环境中存储和同步数据,提高性能。 8. **cglib-2.1.3.jar**:CGLIB是一个代码生成库,常用于动态代理和...

    ASM_Demo.zip

    7. 框架扩展:很多Java框架,如Hibernate和Spring,都使用ASM作为底层工具,用于生成或增强类,以实现其核心功能。 要深入学习和理解ASM,需要熟悉Java字节码的概念、Java类文件结构以及ASM提供的API。通过分析"src...

    tt.rar后台代码资源

    动态树结构通常用于展示层次化的数据,例如组织结构、目录或文件系统。在后端,这可能涉及构建API来检索和更新树形数据,以及支持递归查询和节点操作。 数据表格是展示大量结构化数据的有效方式。后端开发这部分...

    TeenBlog博客系统 | JSP开发使用了SSH框架

    5. **项目结构与导入**:压缩包中的"TeenBlog"很可能包含以下目录:src(源代码)、WEB-INF(Web应用的内部信息,如web.xml)、lib(库文件)、jsp(JSP页面)等。导入项目时,需要将其解压并导入到IDE(如Eclipse或...

    sshe整合教程

    本教程旨在提供一套简单易行的SSHE(Struts2 + Spring3 + Hibernate4 + Maven + EasyUI)框架整合开发流程,帮助学习者更好地掌握和梳理相关技术知识。 #### 一、开发环境搭建 1. **JDK (Java Development Kit)** ...

    extjs+ssh2图书关系系统源码

    它提供了多种组件,如表格、树形视图、面板、表单等,使得开发者能够构建出具有桌面应用般体验的网页应用。EXTJS的强项在于其丰富的组件库、灵活的数据绑定机制以及对响应式设计的良好支持,使得界面既美观又易于...

    Maven权威指南 很精典的学习教程,比ANT更好用

    站点生成和报告 (Site Generation and Reporting) 3.6. 小结 4. 定制一个Maven项目 4.1. 介绍 4.1.1. 下载本章样例 4.2. 定义Simple Weather项目 4.2.1. Yahoo! Weather RSS 4.3. 创建Simple Weather...

    swing界面设计之JTree

    **项目创建好后,加入类库**:通常需要引入用于数据验证的库,如Hibernate Validator等。 **然后写一个persistence bean**:该bean用于执行数据验证逻辑。 - **Java代码**:示例代码展示了如何创建一个名为`...

    xtree一个完整项目

    在本项目中,JSP文件主要用于生成动态的用户界面,通过与后台JavaBean或Servlet交互,将xtree的数据呈现给用户。 **Struts框架**: Struts是MVC(Model-View-Controller)架构模式的一个实现,主要用于构建基于Java...

    精品--个人简历模板vue版本,本人为Java后端开发工程师、全栈工程师,欢迎HR来撩,也欢迎小伙伴start本项目.zip

    在简历模板中,虽然没有直接涉及Java代码,但我们可以推断,开发者可能拥有使用Spring Boot、Hibernate或MyBatis等Java后端框架的经验,这些框架常用于构建高效、健壮的Web服务。 全栈工程师意味着他不仅熟悉前端...

    MyBatis深入

    - **Hibernate**:一个全自动的ORM框架,它可以自动生成SQL语句并自动执行,极大地简化了数据库操作的过程。 - **JPA (Java Persistence API)**:一种规范,用于定义对象-关系映射的标准API,使得Java程序员能够更加...

    advanced-java-master.zip

    这个压缩包中包含了一个完整的项目目录,让我们来逐一探讨其中可能涉及的知识点。 1. **Java基础** - 类与对象:作为面向对象编程的基础,理解类的定义、对象的创建以及它们之间的关系至关重要。 - 集合框架:如...

    feyasoft Web2.0 desktop application-开源

    `work`目录通常由服务器在运行时生成,用于存放编译后的JSP页面和应用运行时的临时文件。 综合以上,FeyaSoft通过整合这些流行技术,为开发者提供了一套便捷的开发环境,使得他们能更高效地构建出具有桌面应用体验...

    Maven Web基础搭建示例

    对于Web项目,你需要配置`packaging`为`war`,指定Servlet API的版本,并添加其他必要的依赖,例如Spring、Hibernate等。例如: ```xml ... &lt;packaging&gt;war ... &lt;groupId&gt;javax.servlet &lt;artifactId&gt;...

Global site tag (gtag.js) - Google Analytics