根据model实体类DO生成建表SQL

该博客介绍了一个Java工具类,用于根据指定的实体类包路径自动生成对应的SQL建表语句。工具会检查实体类是否有int类型的'id'字段作为主键,并支持设置自增标识。此外,还提供了将SQL语句写入文件的功能,方便开发者快速创建数据库表结构。
import java.io.File;
import java.io.IOException;
import java.lang.reflect.Field;
import java.nio.file.Files;
import java.sql.Timestamp;
import java.util.Date;

/**
 * 根据model实体类DO生成建表SQL
 * 注意:生成的SQL会有一定出入
 * @author zlin
 * @date 20200919
 */
public class DoToSqlUtil {
   
   
 
    public static void main(String[] args) {
   
   
        // 1.将本类放在待转换的项目中
        // 2.执行前先配置如下信息
        // 3.执行此方法
        // 需转换为SQL的实体类包路径
        String packageName = "com.example.demo.entity";
        // 待转换的实体类是否都有int类型自动递增的"id"字段为主键,若配置为true将以id生成自增主键,若配置为false,则转换后的SQL无主键
        boolean idKey = false;
        // 生成结果sql文路径
        String filePath = "../result.sql";
        
        generate(packageName, filePath, idKey);
    }

    private static void generate(String packageName, String filePath, boolean idKey) {
   
   
        StringBuilder sqlBuilder = new StringBuilder();
        sqlBuilder.append("\nSET NAMES utf8mb4;\n").append("SET FOREIGN_KEY_CHECKS = 0;\n");
        // 通过包名生成SQL
        sqlBuilder.append(generateSql(packageName, idKey));
        sqlBuilder.append("\nSET FOREIGN_KEY_CHECKS = 1;\n");
        System.out.println(sqlBuilder.toString());
        sql2File(sqlBuilder.toString(), filePath);
    }

    /**
     * 根据实体类生成建表语句
     */
    private static String generateSql(String packageName, boolean idKey) {
   
   
        StringBuilder sb = new StringBuilder();
        String targetPath = getTargetPathByPackageName(packageName);
        File targetDir = new File(targetPath);
        if (targetDir.exists()) {
   
   
            File[] files = targetDir.listFiles();
            if (null != files && files.length > 0) {
   
   
                for (File file : files
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值