Skip to content

模型生成

NServe 可以从 SQL CREATE TABLE 语句自动生成 TypeScript 数据模型,大大简化了数据层的开发工作。

模型生成流程

  1. 创建 SQL 文件nserve-config/model/ 目录下创建 SQL 文件,例如 user.sql

  2. 编写 SQL 表定义

    sql
    CREATE 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;
  3. 运行生成命令

    bash
    nserve gen
  4. 生成的文件 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 注释

更多文档