1.建两个类:CreateTable和PackageUtil
2.两个类的作用:CreateTable用于建表语句的生成,PackageUtil可以根据报名获取包下所有的类。
3.用法:在CreateTable类中直接给某个类对象即可,如果需要生成某个包下所有的类的建表语句,就借用PackageUtil类即可。
CreateTable代码如下:
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.util.List;
import javax.xml.bind.annotation.XmlElement;
import com.us.bean.User;
public class CreateTable {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
//createTable(User.class, null);
// createTable(Book.class, null);
List<Class<?>> class1 = PackageUtil.getClass("com.us.bean", true);
for (Class<?> class2 : class1) {
createTable(class2, null);
}
}
public static void createTable(Class obj,String tableName) throws IOException{
Field[] fields = null;
fields = obj.getDeclaredFields();
Class annotationType = null;
Object param = null;
String column = null;
XmlElement xmlElement = null;
StringBuilder sb = null;
sb = new StringBuilder(50);
if(tableName==null||tableName.equals("")){
//未传表明默认用类名
tableName = obj.getName();
tableName = tableName.substring(tableName.lastIndexOf(".")+1);
}
sb.append("\r\ndrop table if exists ").append(tableName).append(";\r\n");
sb.append("create table ").append(tableName).append(" ( \r\n");
System.out.println(tableName);
boolean firstId = true;
File file = null;
int count = 0;
for(Field f:fields){
column = f.getName();
column = columnToUpperCase(column);
sb.append(column).append(" ");
System.out.println(column+","+f.getType());
param = f.getType();
String string = f.getType().toString();
String substring = string.substring(string.lastIndexOf(".")+1);
//sb.append(column);//一般第一个是主键
if(substring.equals("String")){
sb.append(" VARCHAR(50) ");
}else {
sb.append(substring);//根据需要自行修改
}
if(firstId){//类型转换
sb.append(" PRIMARY KEY AUTO_INCREMENT ");
firstId = false;
}
//获取字段中包含fieldMeta的注解
//2、获取属性上的所有注释
/*Annotation[] allAnnotations = f.getAnnotations();
for(Annotation an : allAnnotations){
sb.append(" CO