根据Hibernate实体对象,自动生成数据字典(一)

2014-11-24 03:16:48 · 作者: · 浏览: 3

效果图:

\

代码:

package com.jxc.util;

import java.io.File;
import java.io.FileWriter;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.JoinColumn;
import javax.persistence.Table;

public class TableFieldHelper {

	/**
	 * @param args
	 * @throws ClassNotFoundException 
	 * @throws IllegalAccessException 
	 * @throws InstantiationException 
	 */
	public static void main(String[] args) throws Exception {
		String path="C:\\work\\jxc\\target\\jxc-0.0.1-SNAPSHOT\\WEB-INF\\classes\\com\\jxc\\model\\po";
		List
  
    files=files(path);
		StringBuilder sb=new StringBuilder();
		sb.append("数据字典
   ");
		sb.append("
   ");
		
		Integer count=0;
		for (File file : files) {
			String className="com.jxc.model.po."+file.getName().replace(".class", "");
			Class class1=Class.forName(className);
			if(class1.getModifiers()!=1025){
				Object object=class1.newInstance();
				sb.append(createTable(object)+"
   
"); } count++; } sb.append("
表总数:"+count+"
"); sb.append("
创建时间:"+new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss").format(new Date())+"
"); sb.append(""); FileWriter fw = new FileWriter("c:\\table.html"); fw.write(sb.toString(), 0, sb.toString().length()); fw.flush(); fw.close(); } public static String createTable(Object object) throws Exception{ StringBuilder sb=new StringBuilder(); Method[] methods=object.getClass().getDeclaredMethods(); Table table=object.getClass().getAnnotation(Table.class); if(table!=null){ sb.append(" "); sb.append(" "); sb.append(" "); sb.append(" "); sb.append(" "); sb.append(" "); sb.append(" "); sb.append(" "); sb.append(" "); sb.append(" "); sb.append(" "); } System.out.println(object.getClass().getName()); for (Method method : methods) { //根据方法获取字段类型 String field=method.getName().substring("get".length()); field=field.substring(0,1).toLowerCase()+field.substring(1); Column column=method.getAnnotation(Column.class); if(column!=null){ sb.append(" "); String fieldName=column.name(); Field field2=getField(field,object); String type=""; if(field2!=null){ field2.setAccessible(true); type=field2.getType().getSimpleName(); //外键 } sb.append(" "); sb.append(" "); sb.append(" "); sb.append(" "); sb.append(" "); sb.append(" "); } JoinColumn joinColumn=method.getAnnotation(JoinColumn.class); if(joinColumn!=null){ Class class1=Class.forName(method.getReturnType().getName()); Table table2=class1.newInstance().getClass().getAnnotation(Table.class); if(table2!=null){ sb.append(" "); sb.append(" "); sb.append(" "); Field field2=getField(method.getName().substring("get".length()),object); if(field2!=null){ sb.append(" "); } sb.append(" "); sb.append(" "); sb.append(" "); } } } sb.append("
"+""+object.getClass().getName()+" = "+table.name().toLowerCase()+"
数据库字段类字段类型外键表外键类
"+fieldName+""+field+""+type+"
"+joinColumn.name()+""+field+""+field2.getType().getSimpleName()+""+table2.name()+""+method.getReturnType().getName()+"
"); return sb.toString(); } public static Field getField(String key,Object object) throws Exception{ Field[] fields=object.getClass().getDeclaredFields(); for (Field field : fields) { if(field.getName().toLowerCase().equals(key.toLowerCase())){ return field; } } return null; } public static List files(String path){ List files=new ArrayList (); File file=new