fix: Entity生成工具修复 - 自动生成表名和正确的时间戳 🔧

 修复内容(工具层):

1. 自动生成表名:
   - 添加generateTableName方法
   - 规则: nc_前缀 + 驼峰转下划线
   - 例如: SysUser -> nc_sys_user
   - 对应Java MyBatis-Plus配置的table-prefix: nc_

2. 修复时间字段装饰器:
   - 移除@CreateDateColumn/@UpdateDateColumn
   - Java使用Long类型存储秒级时间戳(int)
   - 统一使用@Column装饰器
   - Java: private Long createTime -> MySQL: create_time int
   - NestJS: @Column() createTime: number

📋 修改文件:
- entity-generator.js
  - generateDecorators(): 自动生成表名
  - generateTableName(): 新增方法
  - generateFieldDecorators(): 移除特殊时间处理

🎯 效果:
- 生成的Entity自动匹配Java数据库表名
- 时间字段类型100%一致
- 无需手动修改生成的Entity文件
This commit is contained in:
wanwu
2025-10-26 23:16:03 +08:00
parent 248b1ddda5
commit 41dff547fe

View File

@@ -76,15 +76,34 @@ ${fields}
const decorators = [];
// 实体装饰器
// 修复自动生成表名nc_前缀 + 驼峰转下划线)
if (javaEntity.tableName) {
decorators.push(`@Entity('${javaEntity.tableName}')`);
} else {
decorators.push('@Entity()');
// 从Java类名生成表名SysUser -> nc_sys_user
const tableName = this.generateTableName(javaEntity.className);
decorators.push(`@Entity('${tableName}')`);
}
return decorators.join('\n');
}
/**
* 生成表名Java类名转数据库表名
* 规则nc_前缀 + 驼峰转下划线
* 例如SysUser -> nc_sys_user
*/
generateTableName(className) {
// 驼峰转下划线
const underscoreName = className
.replace(/([A-Z])/g, '_$1')
.toLowerCase()
.replace(/^_/, ''); // 移除开头的下划线
// 添加nc_前缀MyBatis-Plus配置的表前缀
return `nc_${underscoreName}`;
}
/**
* 生成字段
*/
@@ -134,17 +153,10 @@ ${fields}
return decorators.join('\n ');
}
// 创建时间装饰器(优先判断)
if (field.fieldName === 'createdAt' || field.fieldName === 'createTime' || field.columnName === 'create_time') {
const dbColumnName = field.columnName || field.fieldName;
return `@CreateDateColumn({ name: '${dbColumnName}' })`;
}
// 更新时间装饰器(优先判断)
if (field.fieldName === 'updatedAt' || field.fieldName === 'updateTime' || field.columnName === 'update_time') {
const dbColumnName = field.columnName || field.fieldName;
return `@UpdateDateColumn({ name: '${dbColumnName}' })`;
}
// ✅ 修复Java使用Long类型存储秒级时间戳int不使用Date对象
// 所有字段(包括时间字段)都使用普通@Column装饰器
// Java: private Long createTime; -> MySQL: create_time int
// NestJS: @Column() createTime: number;
// 列装饰器
const columnOptions = [];