java 实体通过 nodejs 脚本 还原创建表sql

58 阅读1分钟

java 实体通过 nodejs 脚本 还原创建表sql 测试环境没有数据没有信息 只有代码时 怎样恢复

  1. 代码恢复
  2. 生产中查询出来进行填充数据

const fs = require('fs');
const path = require('path');

// 读取指定路径下的所有Java文件
const javaFilesPath = 'D:\\JL\\otc\\ruoyi-common\\src\\main\\java\\com\\ruoyi\\common\\core\\entity';
const javaFiles = fs.readdirSync(javaFilesPath).filter(file => file.endsWith('.java'));

// 定义SQL文件路径
//const sqlFilePath = 'D:\\JL\\java2sql.sql';
const sqlFilePath = './java2sql.sql';

// 将驼峰命名转换为下划线命名
function camelToSnakeCase(name) {
    return name.replace(/([A-Z])/g, '_$1').toLowerCase();
}

const typeMapping = {
    'int': 'INT',
    'integer': 'INT',
    'long': 'BIGINT',
    'string': 'VARCHAR(255)',
    'double': 'DOUBLE',
    'float': 'FLOAT',
    'boolean': 'BOOLEAN',
    'date': 'DATE',
    'timestamp': 'TIMESTAMP', 
};
// 将Java数据类型转换为MySQL数据类型
function convertJavaTypeToMySQL(javaType) {
    return typeMapping[javaType.toLowerCase()] || 'VARCHAR(255)'; // 默认为VARCHAR(255)类型
}

// 创建表语句模板
function generateCreateTableSQL(className, fields) {
    let sql = `DROP TABLE IF EXISTS ${className};\n`;
    sql += `CREATE TABLE ${className} (\n`;
    fields.forEach((field, index) => {
        const mysqlType = convertJavaTypeToMySQL(field.type);
        sql += `    ${camelToSnakeCase(field.name)} ${mysqlType}`;
        if (field.name.toLowerCase() === 'id') {
            sql += ' PRIMARY KEY AUTO_INCREMENT';
        }
        if (index < fields.length - 1) {
            sql += ',';
        }
        sql += '\n';
    });
    sql += `);`;
    return sql;
}



// 读取Java文件信息并生成SQL文件
javaFiles.forEach(javaFile => { 
    const javaContent = fs.readFileSync( path.join(javaFilesPath, javaFile), 'utf8');

    // 正则表达式匹配字段信息
    const fieldsRegex = /private\s+(\w+)\s+(\w+)\s*;/g;
    const fields = [];
    let match;
    while ((match = fieldsRegex.exec(javaContent)) !== null) {
        fields.push({ type: match[1], name: match[2] });
    }
 
     // 获取表名
     const tableNameMatch = javaContent.match(/@TableName\((?:\s*)["'](\w+)["'](?:\s*)\)|@TableName\((?:\s*)value\s*=\s*["'](\w+)["'](?:\s*)\)/);
     const tableName = tableNameMatch ? tableNameMatch[1] || tableNameMatch[2] : 'UnknownTable';
     // 获取类名
     const className = javaFile.replace('.java', ''); 
     const lowerClassName = className.charAt(0).toLowerCase() + className.slice(1);
    // 生成创建表语句
    const createTableSQL = generateCreateTableSQL(camelToSnakeCase(lowerClassName), fields);

    // 写入SQL文件
    fs.appendFileSync(sqlFilePath, createTableSQL + '\n\n');
});

console.log('SQL文件已生成:', sqlFilePath);