2.0.1 • Published 4 years ago

fast-db-codegen v2.0.1

Weekly downloads
1
License
ISC
Repository
github
Last release
4 years ago

Fast Db Codegen

以Mysql数据库作为数据源, 根据读取到的表结构和提前写好的模板, 生成对应的代码, 使用ejs作为模板引擎

使用

安装

# npm
npm install -D fast-db-codegen
# yarn
yarn add -D fast-db-codegen

数据源配置

  • 在项目根目录新建 .fast-codegen 文件夹
  • 创建 config.json 数据源配置
{
    "datasource": {
        "host": "yourMysqlHost",
        "user": "yourMysqlUser",
        "password": "yourMysqlPassword",
        "port": "yourMysqlPort",
        "database": "yourMysqlDatabase"
    }
}

模板内参数

  • 所有 .fast-codegen/default 文件夹下, 以.ejs为扩展名, 并且内容的第一行以#!开头的文件, 都会当做模板处理进行编译
  • 可以根据需求创建多套模板,在 .fast-codege 下创建新的文件夹 dirName,在运行的时候通过 npm run codegen template=dirName xxxx 进行选择模板
  • 第一行为描述行 #! xxx/xxx.xx 为渲染目标路径(第一行如果不是以 #! 开头, 不进行渲染), #!后的内容同样支持 ejs 语法
  • 可以给描述行传参进行不同的渲染模式, 格式为 #! xxx/xxx/xx.xx?mode=youMode, 其中youMode替换为需要的模式
    • 啥都不传: 默认模式, 目标文件不存在, 则会创建目录并且创建目标文件并写入
    • append: 追加模式, 目标文件不存在, 则创建并写入内容, 如目标文件已存在, 则在文件末尾处追加模板渲染结果
    • overwrite: 重写模式, 目标文件不存在, 则创建别写入内容, 如目标文件已存在, 则删除模板文件后, 再进行创建和写入的流程
  • 模板内model格式如下
/**
 * 全局参数类型
 */
class ModelType {
     /** 根据表名转换的类型名称 `fs_user` -> `FsUser` */
    typeName: string
    /**  根据表名转换类型名称连字符模式 `fs_demo_table_string` -> `fs-demo-table-string` */
    typeNameWithHyphen: string
    /** 所有表字段 */
    params: Field[]
    /** 目前和typeName一致 */
    realType: string
    /** 表名 */
    tableName?: string
    /** 主键名称 */
    primaryKey?: string
    /** 表备注 */
    typeRemark?: string
}

 class Field {
    /** 字段名驼峰 test_field -> testField */
    name: string
    /** 字段类型(经过转换的javascript类型) */
    type: string
    /** 原始数据库类型 */
    rawType: string
    /** 字段备注 */
    remark?: string
}

举个例子

  • fs_user 表结构如下:
CREATE TABLE `fs_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `username` varchar(36) CHARACTER  NOT NULL COMMENT '用户名',
  `password` char(64) CHARACTER  NOT NULL COMMENT '密码',
  `password_salt` char(32) CHARACTER  NOT NULL COMMENT '密码Salt',
  `real_name` varchar(36) CHARACTER  DEFAULT NULL COMMENT '真实姓名',
  `email` varchar(128) DEFAULT NULL COMMENT '邮箱',
  `mobile` varchar(20) DEFAULT NULL COMMENT '电话',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `last_login_time` timestamp NULL DEFAULT NULL COMMENT '最后一次登录时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户基础表'
  • 有个模板文件如下 .fast-codege/default/demo.ejs :
#! .temp/<%=realType%>.json
{
    "typeName":  <%-JSON.stringify(typeName)%>,
    "fields": [<%-
        fields.map(JSON.stringify).join(',\n')%>
    ],
    "realType": <%-JSON.stringify(realType)%>,
    "tableName": <%-JSON.stringify(tableName)%>,
    "primaryKey": <%-JSON.stringify(primaryKey)%>,
    "typeRemark": <%-JSON.stringify(typeRemark)%>
}
  • 生成文件 .temp/FsUser.json
{
    "typeName":  "FsUser",
    "typeNameWithHyphen":  "fs-user",
    "fields": [
        {"name":"id","rawType":"int","type":"number","remark":"ID"},
{"name":"username","rawType":"varchar","type":"string","remark":"用户名"},
{"name":"password","rawType":"char","type":"string","remark":"密码"},
{"name":"passwordSalt","rawType":"char","type":"string","remark":"密码Salt"},
{"name":"realName","rawType":"varchar","type":"string","remark":"真实姓名"},
{"name":"email","rawType":"varchar","type":"string","remark":"邮箱"},
{"name":"mobile","rawType":"varchar","type":"string","remark":"电话"},
{"name":"createTime","rawType":"timestamp","type":"number","remark":"创建时间"},
{"name":"updateTime","rawType":"timestamp","type":"number","remark":"更新时间"},
{"name":"lastLoginTime","rawType":"timestamp","type":"number","remark":"最后一次登录时间"}
    ],
    "realType": "FsUser",
    "tableName": "fs_user",
    "primaryKey": "id",
    "typeRemark": "用户基础表"
}

生成代码

package.jsonscripts中添加配置

{
    codegen: "codegen"
}

运行

npm run codegen yourTable yourTable2 yourTable3

开发

  • 运行 npm i
  • 运行 npm run dev 编译 bin/index.tsdist\index.js
  • 运行 npm run start || node dist\index.js tablename1 tablename2 tablename3 进行测试
2.0.1

4 years ago

2.0.0

4 years ago

1.0.12

4 years ago

1.0.11

4 years ago

1.0.10

4 years ago

1.0.9

4 years ago

1.0.8

4 years ago

1.0.7

4 years ago

1.0.6

4 years ago

1.0.5

4 years ago

1.0.4

4 years ago

1.0.3

5 years ago

1.0.2

5 years ago

1.0.1

5 years ago