<?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);
}
}
分享到:
相关推荐
总之,深入学习Hibernate 3.2.5的源码有助于我们更好地理解和运用这个框架,从而提升开发效率,解决实际问题。通过Eclipse工程的实践,我们可以从源码层面洞悉其内部运作,进一步提升自己的Java开发技能。
### Hibernate学习笔记 #### 第一个Hibernate项目(hibernate_first) 在进行Hibernate的学习时,首先会接触到的是如何创建一个简单的Hibernate项目。以下是一些关键步骤: 1. **新建Java项目**: - 首先,在...
在Java开发中,构建无限级分类目录树是常见的需求,特别是在网站内容管理、电商商品分类、文件管理系统等场景。这个"sorttree"项目提供了一种实现这一功能的解决方案。下面我们将详细探讨Java与JSP结合实现无限级...
通过学习和实践这个项目,开发者可以深入了解Spring和Hibernate的整合技巧,掌握如何优化数据库访问性能,以及如何利用Hibernate的反向工程工具提高开发效率。同时,这也是提升Java Web开发技能,特别是ORM技术理解...
它提供了一套完整的组件模型,包括表格、树形结构、图表等,用于创建美观且交互性强的用户界面。EXTJS通过Ajax技术与服务器进行数据交换,实现了页面无需刷新即可更新内容的效果。 2. **JSON**: JSON(JavaScript ...
4. **EasyUI**:一个基于jQuery的UI插件集合,可以快速构建丰富的用户界面,包括表格、树形菜单、对话框等组件。 #### 三、项目搭建步骤 1. **项目复制与命名**: - 在第五章的项目`digital-ssh`基础上进行复制...
在JSP中,可能用于解析和生成语法树。 7. **jboss-cache.jar**:这是JBoss的一个缓存解决方案,用于在分布式环境中存储和同步数据,提高性能。 8. **cglib-2.1.3.jar**:CGLIB是一个代码生成库,常用于动态代理和...
7. 框架扩展:很多Java框架,如Hibernate和Spring,都使用ASM作为底层工具,用于生成或增强类,以实现其核心功能。 要深入学习和理解ASM,需要熟悉Java字节码的概念、Java类文件结构以及ASM提供的API。通过分析"src...
动态树结构通常用于展示层次化的数据,例如组织结构、目录或文件系统。在后端,这可能涉及构建API来检索和更新树形数据,以及支持递归查询和节点操作。 数据表格是展示大量结构化数据的有效方式。后端开发这部分...
5. **项目结构与导入**:压缩包中的"TeenBlog"很可能包含以下目录:src(源代码)、WEB-INF(Web应用的内部信息,如web.xml)、lib(库文件)、jsp(JSP页面)等。导入项目时,需要将其解压并导入到IDE(如Eclipse或...
本教程旨在提供一套简单易行的SSHE(Struts2 + Spring3 + Hibernate4 + Maven + EasyUI)框架整合开发流程,帮助学习者更好地掌握和梳理相关技术知识。 #### 一、开发环境搭建 1. **JDK (Java Development Kit)** ...
它提供了多种组件,如表格、树形视图、面板、表单等,使得开发者能够构建出具有桌面应用般体验的网页应用。EXTJS的强项在于其丰富的组件库、灵活的数据绑定机制以及对响应式设计的良好支持,使得界面既美观又易于...
站点生成和报告 (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...
**项目创建好后,加入类库**:通常需要引入用于数据验证的库,如Hibernate Validator等。 **然后写一个persistence bean**:该bean用于执行数据验证逻辑。 - **Java代码**:示例代码展示了如何创建一个名为`...
在本项目中,JSP文件主要用于生成动态的用户界面,通过与后台JavaBean或Servlet交互,将xtree的数据呈现给用户。 **Struts框架**: Struts是MVC(Model-View-Controller)架构模式的一个实现,主要用于构建基于Java...
在简历模板中,虽然没有直接涉及Java代码,但我们可以推断,开发者可能拥有使用Spring Boot、Hibernate或MyBatis等Java后端框架的经验,这些框架常用于构建高效、健壮的Web服务。 全栈工程师意味着他不仅熟悉前端...
- **Hibernate**:一个全自动的ORM框架,它可以自动生成SQL语句并自动执行,极大地简化了数据库操作的过程。 - **JPA (Java Persistence API)**:一种规范,用于定义对象-关系映射的标准API,使得Java程序员能够更加...
这个压缩包中包含了一个完整的项目目录,让我们来逐一探讨其中可能涉及的知识点。 1. **Java基础** - 类与对象:作为面向对象编程的基础,理解类的定义、对象的创建以及它们之间的关系至关重要。 - 集合框架:如...
`work`目录通常由服务器在运行时生成,用于存放编译后的JSP页面和应用运行时的临时文件。 综合以上,FeyaSoft通过整合这些流行技术,为开发者提供了一套便捷的开发环境,使得他们能更高效地构建出具有桌面应用体验...
对于Web项目,你需要配置`packaging`为`war`,指定Servlet API的版本,并添加其他必要的依赖,例如Spring、Hibernate等。例如: ```xml ... <packaging>war ... <groupId>javax.servlet <artifactId>...