根据Hibernate实体对象,自动生成数据字典
2014-01-15 15:39
615 查看
效果图:
代码: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<File> files=files(path);
StringBuilder sb=new StringBuilder();
sb.append("<!DOCTYPE HTML><html><head>数据字典</head><meta content=\"text/html;charset=utf-8\" http-equiv=\"content-type\"></meta><body>");
sb.append("<style>table{border-collapse:collapse;} table td{border:#CCC 1px solid;padding:5px;}</style>");
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)+"<div style='height:1px;border-bootom:#CCC 1px solid;margin:10px 0px;'></div>");
}
count++;
}
sb.append("<div>表总数:"+count+"</div>");
sb.append("<div>创建时间:"+new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss").format(new Date())+"</div>");
sb.append("</body></html>");
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("<table>");
sb.append("<tr>");
sb.append("<td colspan='5' style='text-align: center;'>"+"<a href='javascript:void();' name='"+object.getClass().getName()+"'>"+object.getClass().getName()+"</a> = "+table.name().toLowerCase()+"</td>");
sb.append("</tr>");
sb.append("<tr>");
sb.append("<td>数据库字段</td>");
sb.append("<td>类字段</td>");
sb.append("<td>类型</td>");
sb.append("<td>外键表</td>");
sb.append("<td>外键类</td>");
sb.append("</tr>");
}
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("<tr>");
String fieldName=column.name();
Field field2=getField(field,object);
String type="";
if(field2!=null){
field2.setAccessible(true);
type=field2.getType().getSimpleName();
//外键
}
sb.append("<td>"+fieldName+"</td>");
sb.append("<td>"+field+"</td>");
sb.append("<td>"+type+"</td>");
sb.append("<td> </td>");
sb.append("<td> </td>");
sb.append("</tr>");
}
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("<tr>");
sb.append("<td>"+joinColumn.name()+"</td>");
sb.append("<td>"+field+"</td>");
Field field2=getField(method.getName().substring("get".length()),object);
if(field2!=null){
sb.append("<td>"+field2.getType().getSimpleName()+"</td>");
}
sb.append("<td>"+table2.name()+"</td>");
sb.append("<td><a href='#"+method.getReturnType().getName()+"'>"+method.getReturnType().getName()+"</a></td>");
sb.append("</tr>");
}
}
}
sb.append("</table>");
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<File> files(String path){
List<File> files=new ArrayList<File>();
File file=new File(path);
File[] listFiles=file.listFiles();
for (File file2 : listFiles) {
if(file2.isFile()){
files.add(file2);
}else {
files.addAll(files(file2.getPath()));
}
}
return files;
}
}
只能是注解配置的对象才会生效!
代码: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<File> files=files(path);
StringBuilder sb=new StringBuilder();
sb.append("<!DOCTYPE HTML><html><head>数据字典</head><meta content=\"text/html;charset=utf-8\" http-equiv=\"content-type\"></meta><body>");
sb.append("<style>table{border-collapse:collapse;} table td{border:#CCC 1px solid;padding:5px;}</style>");
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)+"<div style='height:1px;border-bootom:#CCC 1px solid;margin:10px 0px;'></div>");
}
count++;
}
sb.append("<div>表总数:"+count+"</div>");
sb.append("<div>创建时间:"+new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss").format(new Date())+"</div>");
sb.append("</body></html>");
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("<table>");
sb.append("<tr>");
sb.append("<td colspan='5' style='text-align: center;'>"+"<a href='javascript:void();' name='"+object.getClass().getName()+"'>"+object.getClass().getName()+"</a> = "+table.name().toLowerCase()+"</td>");
sb.append("</tr>");
sb.append("<tr>");
sb.append("<td>数据库字段</td>");
sb.append("<td>类字段</td>");
sb.append("<td>类型</td>");
sb.append("<td>外键表</td>");
sb.append("<td>外键类</td>");
sb.append("</tr>");
}
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("<tr>");
String fieldName=column.name();
Field field2=getField(field,object);
String type="";
if(field2!=null){
field2.setAccessible(true);
type=field2.getType().getSimpleName();
//外键
}
sb.append("<td>"+fieldName+"</td>");
sb.append("<td>"+field+"</td>");
sb.append("<td>"+type+"</td>");
sb.append("<td> </td>");
sb.append("<td> </td>");
sb.append("</tr>");
}
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("<tr>");
sb.append("<td>"+joinColumn.name()+"</td>");
sb.append("<td>"+field+"</td>");
Field field2=getField(method.getName().substring("get".length()),object);
if(field2!=null){
sb.append("<td>"+field2.getType().getSimpleName()+"</td>");
}
sb.append("<td>"+table2.name()+"</td>");
sb.append("<td><a href='#"+method.getReturnType().getName()+"'>"+method.getReturnType().getName()+"</a></td>");
sb.append("</tr>");
}
}
}
sb.append("</table>");
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<File> files(String path){
List<File> files=new ArrayList<File>();
File file=new File(path);
File[] listFiles=file.listFiles();
for (File file2 : listFiles) {
if(file2.isFile()){
files.add(file2);
}else {
files.addAll(files(file2.getPath()));
}
}
return files;
}
}
只能是注解配置的对象才会生效!
相关文章推荐
- Hibernate 根据实体映射文件自动生成表
- hibernate根据实体自动生成表的设置
- 【IntelliJ Idea】idea下hibernate反向生成工具,根据数据表生成实体
- 添加注解后,框架没有自动根据实体类生成数据表,Hibernate
- mybatis 根据 数据库表 自动生成 实体 并自动生成中文注释
- 根据库中的表自动生成数据字典的T-SQL脚本
- 生成二维码 加密解密类 TABLE转换成实体、TABLE转换成实体集合(可转换成对象和值类型) COOKIE帮助类 数据类型转换 截取字符串 根据IP获取地点 生成随机字符 UNIX时间转换为DATETIME\DATETIME转换为UNIXTIME 是否包含中文 生成秘钥方式之一 计算某一年 某一周 的起始时间和结束时间
- 根据库中的表自动生成数据字典的T-SQL脚本 ---转
- mybatis 根据 数据库表 自动生成 实体
- 使用Myeclipse10.0自动生成搭建SSH框架(数据库表自动反向转换成Hibernate实体)实现用户登陆
- 【原创】搭建SSH后通过反向工程(Reverse Engineering)自动生成Hibernate Bean实体和Spring Dao对象详解(图文)
- 使用Myeclipse10.0自动生成搭建SSH框架(数据库表自动反向转换成Hibernate实体)实现用户登陆
- JPA学习笔记---JPA实体Bean的建立+配置文件+junit测试+自动生成(对应实体Bean的)数据库表+插入数据
- SQL2005系统升级手记之四-自动生成数据字典与系统表Sys.extended_properites
- hibernate 根据实体类自动生成表
- 使用Hibernate-tools中的hbm2java和hbm2ddl根据hbm文件自动生成pojo和数据库脚本
- 【原创分享】django-m2doc, 自动根据project下的所有models生成数据表结构文档.
- hibernate注解自动生成数据表
- 通过数据库表自动生成POJO(JavaBean)对象
- myeclipse6.5 自带Hibernate Reverse Engineering工具自动生成实体和dao时找不到项目工程