java 实体通过 nodejs 脚本 还原创建表sql 测试环境没有数据没有信息 只有代码时 怎样恢复
- 代码恢复
- 生产中查询出来进行填充数据
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);