反向生成:根据mybatis生成的Class实体类对象反向生成建表语句

微信公众号:大数据高性能计算
反向生成:根据mybatis生成的Class实体类对象反向生成建表语句_第1张图片

针对数据库不小心被删除的情况,以及需要逆向查看某个开源项目数据库表的情况时,往往需要逆向工程。

在这里我们假设 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;
    }
}

你可能感兴趣的:(mybatis,oracle,数据库)