微信公众号:大数据高性能计算
针对数据库不小心被删除的情况,以及需要逆向查看某个开源项目数据库表的情况时,往往需要逆向工程。
在这里我们假设 id 字段为主键。在生成 SQL 建表语句时,我们添加了 PRIMARY KEY (id) 来定义 id 字段作为主键的约束。
请确保实体类 Entity 中存在名为 id 的字段,并且该字段定义了 @Id 注解,以确保 id 字段作为主键被正确识别。
如果实体类 Entity 中没有 id 字段,或者没有使用 @Id 注解,需要根据实际情况修改代码,将主键字段的名称和注解进行适当的调整。
import java.lang.reflect.Field;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
String tableName = "表名";
StringBuilder sql = new StringBuilder();
sql.append("CREATE TABLE ").append(tableName).append(" (\n");
Class<Entity> entityClass = Entity.class;
Field[] fields = entityClass.getDeclaredFields();
for (Field field : fields) {
String fieldName = field.getName();
String fieldType = field.getType().getSimpleName();
// 根据字段类型转换为数据库对应的数据类型
String dbType = convertToDbType(fieldType);
// 添加字段和数据类型到SQL语句中
sql.append("\t").append(fieldName).append(" ").append(dbType).append(",\n");
}
// 添加主键约束
sql.append("\tPRIMARY KEY (id)\n");
sql.append(");");
System.out.println(sql.toString());
}
private static String convertToDbType(String fieldType) {
Map<String, String> typeMap = new HashMap<>();
typeMap.put("boolean", "BOOLEAN");
typeMap.put("byte", "TINYINT");
typeMap.put("short", "SMALLINT");
typeMap.put("int", "INT");
typeMap.put("long", "BIGINT");
typeMap.put("float", "FLOAT");
typeMap.put("double", "DOUBLE");
typeMap.put("char", "CHAR(1)");
typeMap.put("String", "VARCHAR(255)");
typeMap.put("Date", "DATETIME");
// 可以继续添加其他类型的映射关系
String dbType = typeMap.get(fieldType);
if (dbType == null) {
dbType = "VARCHAR(255)";
}
return dbType;
}
}