用java代码根据实体类自动生成对应的建表语句或生成某个包下的所有类的建表语句

本文介绍如何使用Java代码自动生成基于实体类的建表语句,包括CreateTable类用于生成单个类的建表语句,PackageUtil类能获取指定包下所有类并生成它们的建表语句。示例代码展示了如何操作。
摘要由CSDN通过智能技术生成

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值