Node.java
package com.pk.tree; import java.util.Set; public class Node { private int id; private String name; private int level; //层次 private boolean leaf;//是否是叶子 private Node parents;//父节点 private Set childrens;//子节点 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; } public int getLevel() { return level; } public void setLevel(int level) { this.level = level; } public boolean isLeaf() { return leaf; } public void setLeaf(boolean leaf) { this.leaf = leaf; } public Node getParents() { return parents; } public void setParents(Node parents) { this.parents = parents; } public Set getChildrens() { return childrens; } public void setChildrens(Set childrens) { this.childrens = childrens; } }
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 package="com.pk.tree"> <class name="Node" table="t_node"> <id name="id"> <generator class="native"></generator> </id> <property name="name"></property> <property name="level"></property> <property name="leaf"></property> <many-to-one name="parents" column="pid"></many-to-one> <set name="childrens" inverse="true"> <key column="pid"></key> <one-to-many class="Node" /> </set> </class> </hibernate-mapping>
NodeCreate.java
package com.pk.tree; import java.io.File; import java.util.Iterator; import java.util.List; import java.util.Set; import org.hibernate.Session; import org.hibernate.Transaction; import com.pk.util.HibernateUtil; public class NodeCreate { private NodeCreate(){ } private static NodeCreate nodeCreate; public static synchronized NodeCreate getInstance(){ if(nodeCreate==null){ nodeCreate=new NodeCreate(); } return nodeCreate; } public void createTree(String filepath){ Session session=null; Transaction tx=null; try{ session=HibernateUtil.getSession(); tx=session.beginTransaction(); File root=new File(filepath); //真正的见表save(root,session,parent,int level) saveNode(root,session,null,1); tx.commit(); }catch(Exception e){ e.printStackTrace(); tx.rollback(); }finally{ HibernateUtil.closeSession(session); } } private void saveNode(File root,Session session ,Node parents,int level){ boolean leaf=root.isFile(); Node node=new Node(); node.setName(root.getName()); node.setLevel(level); node.setLeaf(leaf); node.setParents(parents); session.save(node); File[] files=root.listFiles(); if(files!=null&&files.length>0){ for(int i=0;i<files.length;i++){ saveNode(files[i],session,node,level+1); } } } public void printNode(int id){ Session session=null; Transaction tx=null; try{ session=HibernateUtil.getSession(); tx=session.beginTransaction(); Node root=(Node) session.load(Node.class, id); //打印其中的所有信息 printAllNode(root,session); tx.commit(); }catch(Exception e){ e.printStackTrace(); tx.rollback(); }finally{ HibernateUtil.closeSession(session); } } private void printAllNode(Node root,Session session){ boolean leaf=root.isLeaf(); //System.out.println(root.getId()+"********"+root.getName()); int level=root.getLevel(); if(level==1){ System.out.println(root.getName()); }else{ for(int i=0;i<level;i++){ System.out.print("| "); } System.out.println("--"+root.getName()+ (leaf ?"":"["+root.getChildrens().size()+"]")); } Set nodeList=root.getChildrens(); //List nodeList=session.createQuery("select a from Node a where pid="+root.getId()).list(); for(Iterator it=nodeList.iterator();it.hasNext();){ Node node=(Node) it.next(); printAllNode(node,session); } } }
MainTest.java
package com.pk.tree; import org.hibernate.cfg.Configuration; import org.hibernate.tool.hbm2ddl.SchemaExport; public class MainTest { public static void main(String[] args) { Configuration cfg=new Configuration().configure(); SchemaExport export=new SchemaExport(cfg); export.create(true, true); } }
TestTree.java
package com.pk.test; import com.pk.tree.NodeCreate; import junit.framework.TestCase; public class TestTree extends TestCase { public void testSave(){ NodeCreate.getInstance().createTree("E:\\aa\\workspace\\hibernate_8_many2many\\"); } public void testPrint(){ NodeCreate.getInstance().printNode(1); } }
HibernateUtil.java
package com.pk.util; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateUtil { private static SessionFactory sessionFactory; static{ try{ Configuration cfg=new Configuration().configure(); sessionFactory=cfg.buildSessionFactory(); }catch(HibernateException e){ e.printStackTrace(); throw new ExceptionInInitializerError(); } } public static SessionFactory getSessionFactory(){ return sessionFactory; } public static Session getSession(){ return sessionFactory.openSession(); } public static void closeSession(Session session){ if(session!=null){ if(session.isOpen()){ session.close(); } } } public static void closeSessionFactory(){ if(sessionFactory!=null){ sessionFactory.close(); } } }