`
luanmad_java
  • 浏览: 16989 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

使用Hibernate构造出一棵Tree

阅读更多
使用Hibernate构造出一棵Tree
HibernateTree
使用hibernate构造树的结构。
1. 工程目录结构图:
E:/Eclipse/hibernateTree

└─src
│ │ hibernate.cfg.xml
│ │ log4j.properties
│ │
│ └─com
│ └─luanmad
│ └─hibernate
│ ExportToDB.java
│ HibernateUtils.java
│ Node.hbm.xml
│ Node.java
│ NodeManager.java
│ NodeManagerTest.java

└─uselib
antlr-2.7.5H3.jar
asm-attrs.jar
asm-commons-2.2.3.jar
asm.jar
aspectjweaver.jar
c3p0-0.9.1.1.jar
cglib-2.1.3.jar
cglib-nodep-2.1_3.jar
commons-attributes-api.jar
commons-attributes-compiler.jar
commons-codec.jar
commons-collections-2.1.1.jar
commons-dbcp.jar
commons-fileupload.jar
commons-io.jar
commons-lang.jar
commons-logging.jar
commons-pool-1.3.jar
concurrent-1.3.2.jar
connector.jar
cos.jar
dom4j-1.6.1.jar
ehcache-1.1.jar
ehcache-1.2.4.jar
freemarker.jar
hibernate-annotations.jar
hibernate-commons-annotations.jar
hibernate-entitymanager.jar
hibernate3.jar
ibatis-2.3.0.677.jar
jotm.jar
jta.jar
junit.jar
jxl.jar
log4j-1.2.14.jar
mysql-connector-java-5.1.6-bin.jar
ognl-2.6.11.jar
oscache-2.1.jar
xapool.jar
xerces-2.6.2.jar
xwork-2.0.4.jar

2. 文件详细内容:
1. ExportToDB.java,此文件用于生成数据库表。(初始化时用到)
//********************** ExportToDB.java **************************
package com.luanmad.hibernate;

import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

public class ExportToDB {

/**
* @param args
*/
public static void main(String[] args) {

// 读取配置文件
Configuration cfg = new Configuration().configure();

// 创建SchemaExport对象
SchemaExport export = new SchemaExport(cfg);

// 创建数据库表
export.create(true, true);

}

}
//****************************************************************
2.hibernate的工具类。
//********************** HibernateUtils.java ***************************

package com.luanmad.hibernate;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtils {

private static SessionFactory factory;

static {
Configuration cfg = new Configuration().configure();
factory = cfg.buildSessionFactory();
}

public static SessionFactory getSessionFactory() {
return factory;
}

public static Session getSession() {
return factory.openSession();
}

public static void closeSession(Session session) {
if (session != null) {
if (session.isOpen()) {
session.close();
}
}
}
}
//*****************************************************************

3.树的结构。
//************************Node.java**********************************
package com.luanmad.hibernate;

import java.util.Set;

public class Node {

// 标识符
private int id;

// 节点名称
private String name;

// 层次
private int level;

// 是否叶子节点
private boolean leaf;

// 父节点 * --- 1
private Node parent;

// 子节点 1 --- *
private Set children;

public Set getChildren() {
return children;
}

public void setChildren(Set children) {
this.children = children;
}

public int getId() {
return id;
}

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

public boolean isLeaf() {
return leaf;
}

public void setLeaf(boolean leaf) {
this.leaf = leaf;
}

public int getLevel() {
return level;
}

public void setLevel(int level) {
this.level = level;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Node getParent() {
return parent;
}

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

//*****************************************************************

4.创建树型结构。
//**************NodeManager.java ***************************************
package com.luanmad.hibernate;

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

import org.hibernate.Session;

public class NodeManager {

private static NodeManager nodeManager;

private NodeManager() {
}

public static synchronized NodeManager getInstance() {
if (nodeManager == null) {
nodeManager = new NodeManager();
}

return nodeManager;
}

// 创建树型结构
public void createTree(String dir) {
Session session = HibernateUtils.getSession();

try {
session.beginTransaction();

File root = new File(dir);
saveTree(root, session, null, 0);

session.getTransaction().commit();
} catch (RuntimeException e) {
e.printStackTrace();
session.getTransaction().rollback();
} finally {
HibernateUtils.closeSession(session);
}
}

// 递归创建一棵树
private 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.setLevel(level);
node.setParent(parent);
node.setLeaf(isLeaf);
session.save(node);

File[] subs = file.listFiles();
if (subs != null && subs.length > 0) {
for (int i = 0; i < subs.length; i++) {
saveTree(subs, session, node, level + 1);
}
}
}

public void printTree(int id) {
Session session = HibernateUtils.getSession();

try {
session.beginTransaction();

Node root = (Node) session.load(Node.class, id);
printNode(root);

session.getTransaction().commit();
} catch (RuntimeException e) {
e.printStackTrace();
session.getTransaction().rollback();
} finally {
HibernateUtils.closeSession(session);
}
}

private void printNode(Node node) {

if (node == null) {
return;
}
int level = node.getLevel();
if (level > 0) {
for (int i = 0; i < level; i++) {
System.out.print(" |");
}
System.out.print("--");
}

System.out.println(node.getName()
+ (node.isLeaf() ? "" : "[" + node.getChildren().size() + "]"));

Set children = node.getChildren();
for (Iterator iter = children.iterator(); iter.hasNext();) {
Node child = (Node) iter.next();
printNode(child);
}
}
}
//*****************************************************************

5.创建文件夹的树型结构。(程序入口,使用junit来测试)
//******************NodeManagerTest.java*****************************
package com.luanmad.hibernate;

import junit.framework.TestCase;

public class NodeManagerTest extends TestCase {
public void testCreateTree()
{
//文件夹名
NodeManager.getInstance().createTree("E:\\Eclipse\\DtreeDemo");
}
public void testPrintTree()
{
NodeManager.getInstance().printTree(1);
}
}

//*****************************************************************

6.类与表的对应关系。
//******************Node.hbm.xml************************************
<?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.luanmad.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.luanmad.hibernate.Node"/>
</set>

</class>
</hibernate-mapping>

//*****************************************************************

7.hibernate的配置文件
//********************hibernate.cfg.xml***************************
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration
PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/hibernate_tree</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">admin</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>

<!-- -->
<property name="hibernate.show_sql">true</property>

<mapping resource="com/luanmad/hibernate/Node.hbm.xml"/>
</session-factory>
</hibernate-configuration>

//*****************************************************************

8.日志文件。
//***********************log4j.properties**********************************
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### direct messages to file hibernate.log ###
#log4j.appender.file=org.apache.log4j.FileAppender
#log4j.appender.file.File=hibernate.log
#log4j.appender.file.layout=org.apache.log4j.PatternLayout
#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### set log levels - for more verbose logging change 'info' to 'debug' ###

log4j.rootLogger=warn, stdout

#log4j.logger.org.hibernate=info
#log4j.logger.org.hibernate=debug

### log HQL query parser activity
#log4j.logger.org.hibernate.hql.ast.AST=debug

### log just the SQL
#log4j.logger.org.hibernate.SQL=debug

### log JDBC bind parameters ###
#log4j.logger.org.hibernate.type=info
#log4j.logger.org.hibernate.type=debug

### log schema export/update ###
#log4j.logger.org.hibernate.tool.hbm2ddl=debug

### log HQL parse trees
#log4j.logger.org.hibernate.hql=debug

### log cache activity ###
#log4j.logger.org.hibernate.cache=debug

### log transaction activity
#log4j.logger.org.hibernate.transaction=debug

### log JDBC resource acquisition
#log4j.logger.org.hibernate.jdbc=debug

### enable the following line if you want to track down connection ###
### leakages when using DriverManagerConnectionProvider ###
#log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace

//*****************************************************************

运行后的结果:E:\\Eclipse\\DtreeDemo 下的所有文件都以树状形式展示:
DtreeDemo[10]
|--.myhibernatedata
|--.mymetadata
|--WebRoot[5]
| |--META-INF[1]
| | |--MANIFEST.MF
| |--js[3]
| | |--dtree_v3.02.js
| | |--index.js
| | |--dtree.css
| |--img[23]
| | |--cd.gif
| | |--nolines_plus.gif
| | |--folderopen.gif
| | |--question.gif
| | |--joinbottom.gif
| | |--page.gif
| | |--minusbottom.gif
| | |--plus.gif
| | |--minus.gif
| | |--plusbottom.gif
| | |--globe.gif
| | |--nolines_minus.gif
| | |--trash.gif
| | |--showit.gif
| | |--join.gif
| | |--line.gif
| | |--musicfolder.gif
| | |--showit_1.gif
| | |--imgfolder.gif
| | |--empty.gif
| | |--base.gif
| | |--Thumbs.db
| | |--folder.gif
| |--WEB-INF[6]
| | |--applicationContext.xml
| | |--web.xml
| | |--spring.tld
| | |--lib[93]
| | | |--jamon-2.4.jar
| | | |--spring-dao.jar
| | | |--easymock.jar
| | | |--aspectjweaver.jar
| | | |--spring.jar
| | | |--spring-support.jar
| | | |--asm-attrs-2.0.jar
| | | |--aspectjrt.jar
| | | |--spring-web.jar
| | | |--struts2-codebehind-plugin-2.0.6.jar
| | | |--serp-1.12.1.jar
| | | |--cglib-nodep-2.1_3.jar
| | | |--tiles-core-2.0-20070207.130156-4.jar
| | | |--spring-jdbc.jar
| | | |--spring-hibernate3.jar
| | | |--dom4j-1.6.1.jar
| | | |--spring-beans.jar
| | | |--jasperreports-1.3.3.jar
| | | |--spring-portlet.jar
| | | |--hibernate3.jar
| | | |--portlet-api.jar
| | | |--spring-mock.jar
| | | |--hessian-3.0.20.jar
| | | |--commonj-twm.jar
| | | |--log4j-1.2.13.jar
| | | |--spring-agent.jar
| | | |--commons-fileupload.jar
| | | |--freemarker.jar
| | | |--commons-dbcp.jar
| | | |--spring-struts.jar
| | | |--spring-jpa.jar
| | | |--spring-tomcat-weaver.jar
| | | |--persistence.jar
| | | |--junit.jar
| | | |--itext-1.3.jar
| | | |--hibernate-annotations.jar
| | | |--xwork-2.0.1.jar
| | | |--commons-collections.jar
| | | |--commons-attributes-compiler.jar
| | | |--commons-pool-1.3.jar
| | | |--jruby.jar
| | | |--toplink-api.jar
| | | |--groovy-1.0.jar
| | | |--asm-util-2.2.3.jar
| | | |--struts2-spring-plugin-2.0.6.jar
| | | |--ehcache-1.2.4.jar
| | | |--hibernate-entitymanager.jar
| | | |--c3p0-0.9.1.1.jar
| | | |--jotm.jar
| | | |--spring-jms.jar
| | | |--xapool.jar
| | | |--asm-2.2.3.jar
| | | |--jmxri.jar
| | | |--poi-2.5.1.jar
| | | |--jdo2-api.jar
| | | |--commons-logging.jar
| | | |--ibatis-2.3.0.677.jar
| | | |--spring-context.jar
| | | |--jboss-archive-browsing.jar
| | | |--jmxremote.jar
| | | |--commons-io.jar
| | | |--toplink-essentials.jar
| | | |--openjpa-0.9.7-incubating.jar
| | | |--spring-jmx.jar
| | | |--commons-attributes-api.jar
| | | |--jmxremote_optional.jar
| | | |--spring-ibatis.jar
| | | |--easymockclassextension.jar
| | | |--hibernate-commons-annotations.jar
| | | |--antlr-2.7.5H3.jar
| | | |--spring-remoting.jar
| | | |--spring-jdo.jar
| | | |--struts.jar
| | | |--commons-lang.jar
| | | |--struts2-core-2.0.6.jar
| | | |--mysql-connector-java-5.1.5-bin.jar
| | | |--ognl-2.6.11.jar
| | | |--jxl.jar
| | | |--hibernate2.jar
| | | |--jakarta-oro-2.0.8.jar
| | | |--connector.jar
| | | |--commons-httpclient.jar
| | | |--commons-codec.jar
| | | |--jta.jar
| | | |--spring-jca.jar
| | | |--quartz-all-1.6.0.jar
| | | |--spring-toplink.jar
| | | |--spring-webmvc.jar
| | | |--asm-commons-2.2.3.jar
| | | |--spring-core.jar
| | | |--spring-aop.jar
| | | |--cos.jar
| | | |--ehcache-1.1.jar
| | |--classes[2]
| | | |--create.sql
| | | |--com[1]
| | | | |--lsxy[1]
| | | | | |--tmsoft[4]
| | | | | | |--dao[2]
| | | | | | | |--ICategroyDAO.class
| | | | | | | |--impl[1]
| | | | | | | | |--CategroyDAO.class
| | | | | | |--service[2]
| | | | | | | |--ICategroyService.class
| | | | | | | |--impl[1]
| | | | | | | | |--CategroyService.class
| | | | | | |--util[1]
| | | | | | | |--JsonUtil.class
| | | | | | |--vo[2]
| | | | | | | |--Categroy.hbm.xml
| | | | | | | |--Categroy.class
| | |--spring-form.tld
| |--index.html
|--.myeclipse[0]
|--.project
|--.springBeans
|--create.sql
|--src[2]
| |--com[1]
| | |--lsxy[1]
| | | |--tmsoft[4]
| | | | |--dao[2]
| | | | | |--ICategroyDAO.java
| | | | | |--impl[1]
| | | | | | |--CategroyDAO.java
| | | | |--vo[2]
| | | | | |--Categroy.hbm.xml
| | | | | |--Categroy.java
| | | | |--util[1]
| | | | | |--JsonUtil.java
| | | | |--service[2]
| | | | | |--impl[1]
| | | | | | |--CategroyService.java
| | | | | |--ICategroyService.java
| |--create.sql
|--.settings[4]
| |--org.eclipse.wst.jsdt.ui.superType.container
| |--.jsdtscope
| |--org.eclipse.core.resources.prefs
| |--org.eclipse.wst.jsdt.ui.superType.name
|--.classpath

下载:http://luanmad2009.s156.eatj.com/viewthread.jsp?tid=72&page=1#lastpost
分享到:
评论

相关推荐

    E3tree开发文档

    E3.Tree是一个在E3平台上构建树形UI(如菜单、树、外挂栏等)的组件。这个组件的特点在于其部署简便,只需要将相关的jar文件放入WEB-INF/lib目录下即可。E3.Tree提供API和taglib两种使用方式,适应性强,支持包括...

    asm-tree-2.2.1-sources.jar.zip

    ASM Tree库将Java类的字节码解析为一棵抽象语法树(Abstract Syntax Tree,AST)。在AST中,每个节点都代表Java类、方法、字段或指令等元素,这样的结构化表示便于开发者进行遍历和修改。例如,`ClassNode`代表一个...

    hibernate学习资料

    1. **hibernate_training_tree**:这可能是一个关于Hibernate的基础教程或者示例代码库,包括了对Hibernate核心概念、配置、实体映射、事务管理等内容的讲解。学习者可以通过这个树状结构了解Hibernate的整体框架和...

    E3Tree开发文档

    - **定义**:E3Tree是一个专门用于构建树形用户界面(UI)的组件,适用于创建菜单、树形结构、Outlook风格的栏等场景。 - **特点**: - 部署简单:只需将相关JAR包放置到`WEB-INF/lib`目录下即可。 - 一致性的开发...

    struts2_jodo_tree

    **Struts2简介**:Struts2是Apache组织下的一个开源项目,它是Struts1的下一代版本,采用了拦截器架构,更易于与其他框架集成,比如Spring和Hibernate等。Struts2支持各种前端技术,如AJAX、JSON等,这使得它成为...

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

    使用Java的JDBC或ORM框架(如Hibernate、MyBatis)从数据库中获取分类数据。对于无限级分类,可以使用递归SQL查询或者层次查询(如MySQL的`WITH RECURSIVE`)。 4. 构建树结构: 从数据库获取到的数据通常是一组...

    SSH+extjs+json动态树的构造(附详细步骤及源码)

    本教程将详细讲解如何在SSH(Spring、Struts2、Hibernate)框架下,结合ExtJS库和JSON数据格式来实现这一功能。 首先,SSH框架是一个流行的企业级Java Web开发框架,Spring负责管理对象,Struts2处理请求与响应,...

    java实现无限级分类树形,连接mysql数据库

    在Java中,我们可以使用JDBC或者ORM框架如Hibernate、MyBatis来执行SQL查询并获取结果集。将结果集转换为TreeNode对象的集合,然后利用这些对象构建树形结构。例如,使用ArrayList作为树的容器,每个节点包含一个子...

    antlr经典教程,The definitive antlr reference(英文)

    《The Definitive ANTLR Reference》是一本经典的ANTLR教程,该书对ANTLR的关键概念和技术进行了深入浅出的讲解,是ANTLR学习者不可或缺的参考书籍之一。 #### 三、核心知识点 ##### 1. Grammar(文法规则) - **...

    JavaEE技术面试常见问题.doc

    - **使用构造函数**:最常见的实例化方式。 - **使用工厂方法**:适用于需要根据条件创建不同类型对象的情况。 - **使用反射**:动态创建对象。 3. **基本数据类型与包装类的区别** - **基本数据类型**:如int...

    swing界面设计之JTree

    **FileTree1.java源代码**:示例代码展示了如何使用JTree来展示文件系统的目录结构。 #### (十一) Java Swing中的JTree模型 **Swing.tree包中的主要类名称实现** - **构建树模型**:使用`TreeModel`接口及其子类来...

    dsltools:用于创建外部DSL的工具和示例

    PEG(Parsers Expression Grammar)是一种解析表达式语法,它允许开发者用简洁的语法定义语言结构,并且可以处理左递归,这在处理某些复杂的语言构造时非常有用。Rats!是实现PEG解析器的一个Java库,它可以自动生成...

    java面试题

    这些只是Java面试题中的一小部分,面试可能还会涉及反射、设计模式、并发编程、JVM优化、数据库操作(SQL、JDBC、Hibernate)以及Web开发相关的知识(Servlet、JSP、Spring框架等)。此外,对于EJB、数据结构、算法...

Global site tag (gtag.js) - Google Analytics