模型生成
NServe 可以从 SQL CREATE TABLE 语句自动生成 TypeScript 数据模型,大大简化了数据层的开发工作。
模型生成流程
创建 SQL 文件 在
nserve-config/model/目录下创建 SQL 文件,例如user.sql。编写 SQL 表定义
sqlCREATE TABLE `user` ( `id` INT PRIMARY KEY AUTO_INCREMENT COMMENT '用户ID', `username` VARCHAR(50) NOT NULL UNIQUE COMMENT '用户名', `password` VARCHAR(255) NOT NULL COMMENT '密码', `email` VARCHAR(100) NOT NULL UNIQUE COMMENT '邮箱', `status` TINYINT DEFAULT 1 COMMENT '状态:0-禁用,1-启用', `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;运行生成命令
bashnserve gen生成的文件 NServe 会自动生成以下文件:
- 数据模型文件
src/model/users.ts - 模型索引文件
src/model/index.ts
- 数据模型文件
生成的数据模型
生成的数据模型文件包含了表结构对应的 TypeScript 接口和基本操作方法:
typescript
import type { TableOption } from '@dpapejs/emysql'
const table: TableOption = {
tableName: 'user',
columns: [
{
name: 'id',
dataType: 'INT',
notNull: true,
autoIncrement: true,
comments: '用户ID',
primaryKey: true
},
{
name: 'username',
dataType: 'VARCHAR',
length: 255,
comments: '用户名',
unique: true
},
{
name: 'password',
dataType: 'VARCHAR',
length: 255,
comments: '密码'
},
{
name: 'email',
dataType: 'VARCHAR',
length: 255,
comments: '邮箱'
},
{
name: 'status',
dataType: 'INT',
notNull: true,
defaultValue: 1,
comments: '状态:0-禁用,1-启用'
},
{
name: 'create_at',
dataType: 'DATETIME',
notNull: true,
comments: '创建时间'
},
{
name: 'update_at',
dataType: 'DATETIME',
notNull: true,
comments: '更新时间'
}
]
}
export const UserModel = {
tableName: 'user',
idField: 'id',
usernameField: 'username',
passwordField: 'password',
emailField: 'email',
statusField: 'status',
createdAtField: 'created_at',
updatedAtField: 'updated_at'
}模型索引文件
生成的模型索引文件将所有模型整合到一起,方便导入和使用:
typescript
export * from './user'
// 如果有其他模型,也会自动添加到这里注意事项
- SQL 文件必须包含完整的 CREATE TABLE 语句
- 支持 AUTO_INCREMENT 主键定义
- 支持 DEFAULT 值和 ON UPDATE 语法
- 支持 COMMENT 注释,会自动转换为 TypeScript 接口的 JSDoc 注释