⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hbmutil.java

📁 OBPM是一个开源
💻 JAVA
字号:
package cn.myapps.util.hibernate.vo2hbm;

import java.beans.PropertyDescriptor;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.util.Date;

import org.apache.commons.beanutils.PropertyUtils;

public class HbmUtil {

	/**
	 * Retrieve the hbl header string.
	 * @param voClazz The value object class name
	 * @return The hbl header string.
	 */
	private String getHead(Class voClazz) {
		String tbName = voClazz.getName().substring(
                voClazz.getName().lastIndexOf(".") + 1);
        tbName = "t_" + tbName.toLowerCase();
        tbName = tbName.substring(0, tbName.length() - 2);

        String rtn = "";
        rtn += "<?xml version=\"1.0\"?>\n";
        rtn += "<!DOCTYPE hibernate-mapping PUBLIC \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n";
        rtn += "\"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n";
        rtn += "<!-- Generated " + new Date() + " by CreateHbm -->\n";
        rtn += "<hibernate-mapping>\n";
        rtn += "    <class name=\"" + voClazz.getName() + "\" table=\""
                + tbName + "\">\n";
        return rtn;
	}
	
	/**
	 * Retrieve the hbl body string.
	 * @param voClazz The value object class name
	 * @return The hbl header string.
	 */
	private String getBody(Class voClazz) {
		String rtn = getPkElement();

		PropertyDescriptor[] encf = PropertyUtils
                .getPropertyDescriptors(voClazz);
        for (int i = 0; i < encf.length; i++)
            rtn += getElement(encf[i]);
        
        return rtn;
	}
	
	/**
	 * Retrieve the hbl tail string.
	 * @return The hbl tail string.
	 */
	private String getTail() {
		String rtn = "";
	    rtn += "    </class>\n";
	    rtn += "</hibernate-mapping>\n";
		return rtn;
	}
		
	/**
	 * Retrieve the primary key element string.  
	 * @return The primary key element string.
	 */
	private String getPkElement() {
        String rtn = "";
        rtn += "        <id name=\"id\">\n";
        rtn += "        <column name=\"id\"/>\n";
        rtn += "        <generator class=\"assigned\" />\n";
        rtn += "        </id>\n";
        return rtn;
    }
	
	/**
	 * Retrieve the field element string.  
	 * @param fd The field
	 * @return The field element string.  
	 */
	private String getElement(PropertyDescriptor fd) {        
		Class fieldType = fd.getPropertyType();
        String fieldName = fd.getName();
		String rtn = "";

        if (fieldName.indexOf("_") >= 0) {
            return rtn;
        }

        if (fieldName.equals("class")) {
            return rtn;
        }

        if (fieldName.equals("id")) {
            return rtn;
        }

        if (fieldType.equals(Long.TYPE)) {
            rtn += "        <property name=\"" + fieldName + "\" >\n";
            rtn += "            <column name=\"" + fieldName + "\" />\n";
            rtn += "        </property>\n";
            return rtn;
        }

        if (fieldType.equals(Integer.TYPE)) {
            rtn += "        <property name=\"" + fieldName + "\" >\n";
            rtn += "            <column name=\"" + fieldName + "\" />\n";
            rtn += "        </property>\n";
            return rtn;
        }

        if (fieldType.equals(Double.TYPE)) {
            rtn += "        <property name=\"" + fieldName + "\" >\n";
            rtn += "            <column name=\"" + fieldName + "\" />\n";
            rtn += "        </property>\n";
            return rtn;
        }

        if (fieldType.equals(java.lang.String.class)) {
            rtn += "        <property name=\"" + fieldName + "\" >\n";
            rtn += "            <column name=\"" + fieldName
                    + "\" length=\"200\" />\n";
            rtn += "        </property>\n";
            return rtn;
        }

        if (fieldType.equals(Float.TYPE)) {
            rtn += "        <property name=\"" + fieldName + "\" >\n";
            rtn += "            <column name=\"" + fieldName + "\" />\n";
            rtn += "        </property>\n";
            return rtn;
        }

        if (fieldType.equals(java.sql.Date.class)) {
            rtn += "        <property name=\"" + fieldName + "\" >\n";
            rtn += "            <column name=\"" + fieldName + "\" />\n";
            rtn += "        </property>\n";
            return rtn;
        }

        if (fieldType.equals(java.sql.Timestamp.class)) {
            rtn += "        <property name=\"" + fieldName + "\" >\n";
            rtn += "            <column name=\"" + fieldName + "\" />\n";
            rtn += "        </property>\n";
            return rtn;
        }

        if (fieldType.equals(Boolean.TYPE)) {
            rtn += "        <property name=\"" + fieldName + "\">\n";
            rtn += "            <column name=\"" + fieldName + "\"/>\n";
            rtn += "        </property>\n";
            return rtn;
        }
        if (fieldType.equals(byte[].class)) {
            rtn += "        <property name=\"" + fieldName + "\">\n";
            rtn += "            <column name=\"" + fieldName + "\"/>\n";
            rtn += "        </property>\n";
            return rtn;
        }
        
        return rtn;
	}
	
	/**
	 * Retrieve the hbl file string 
	 * @param voClazz The value object class.
	 * @return The  hbl file string.
	 */
	public String fabricateXml(Class voClazz) {
		String rtn = "";
		rtn += getHead(voClazz);
		rtn += getBody(voClazz);
		rtn += getTail();
		
		return rtn;
		
	}
	
	/**
	 * Build the hbl xml file.
	 * @param className The target value objet class name.
	 * @param targetPath The target file path.
	 * @throws Exception
	 */
	public void buildHbmXml(String className, String targetPath) throws Exception {
		Class clazz = Class.forName(className);
        String cn = className.substring(className.lastIndexOf(".") + 1);

        String targetFn = targetPath + "\\" + cn + ".hbm.xml";
        System.out.println(targetFn);
        String xml = fabricateXml(clazz);
        File xFile = new File(targetFn);
        FileWriter fw = new FileWriter(xFile);
        BufferedWriter bw = new BufferedWriter(fw);
        bw.write(xml);

        bw.close();
        fw.close();			
	}
	
	/**
	 * Build the hbl xml file batchly.
	 * @param d The file path of the value object java source path. 
	 * @param sp The sourfile path.
	 * @throws Exception
	 */
	public void batchBuildHbmXml(File d, String sp) throws Exception {
        if (d.isDirectory()) {
            File[] fs = d.listFiles();
            for (int i = 0; i < fs.length; i++) {
                if (fs[i].isDirectory()) {
                    batchBuildHbmXml(fs[i], sp);
                } else {
                    if (fs[i].getName().endsWith("VO.java")) {
                        String fn = fs[i].getAbsolutePath();

                        String pattern = sp.replaceAll("\\\\", ".");
                        String className = fn.replaceAll("\\\\", ".");
                        className = className.replaceFirst(pattern, "");
                        className = className.substring(1,
                                className.length() - 5);

                        String targetPath = fs[i].getParent();
                        buildHbmXml(className, targetPath);
                    }
                }
            }
        }

    }
	
	public static void main(String[] args)  throws Exception{
	    HbmUtil hbm = new HbmUtil();
        String sourcePath = "c:\\java\\workspace\\myapps\\src";
        hbm.batchBuildHbmXml(new File(sourcePath), sourcePath);
	}
	
	

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -