`
luanmad_java
  • 浏览: 16530 次
  • 性别: 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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics