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

微信公众号:大数据高性能计算
在这里插入图片描述

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值