效果图:

代码:
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("
"+""+object.getClass().getName()+" = "+table.name().toLowerCase()+" "); 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("
"+fieldName+" "); sb.append("
"+field+" "); sb.append("
"+type+" "); 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("
"+joinColumn.name()+" "); sb.append("
"+field+" "); Field field2=getField(method.getName().substring("get".length()),object); if(field2!=null){ sb.append("
"+field2.getType().getSimpleName()+" "); } sb.append("
"+table2.name()+" "); sb.append("
"+method.getReturnType().getName()+" "); sb.append("
"); } } } sb.append("
");
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