• 基于typeorm的nestjs项目使用@zdhsoft/tmg将数据库生成数据模型


    原因

    • 原来是使用thinkjs,由于它已经停更了,所以现在我的node后端是nestjs+typeorm.
    • 但是typeorm需要自己定义,每次手写很麻烦,所以网找到了一个工具typeorm-model-generator,省了很多事,但是有几点让我不是很满意:
      • 第一,不支持 typeorm 0.3.7,虽然生成的代码,在新版上可以用。
      • 第二,生成的代码,不满足prettier的格式,每次都要格式化一下
      • 第三,生成的文件名不支持snake命名方式. 我这里的代码范围是要求文件名小写。
      • 第四,就是没有对FindOptions,SelectOption等生成预定义类型。
      • 第五,命令太长了:typeorm-model-generator,不好记。
      • 最后,就是原作者好像没有对它更新维护了

    实现

    • 针对上述五点,我fork了这个项目,然后针对上面的内容修改。
      • 首先,我把它升级到 typeorm 0.3.7的版本。typeorm 0.3.7的版本与0.2.x的内容变化很大,很多接口都标注了deprecated。准确来说,是更加严格了。
      • 第二,修改了prettier配置,在ModelGeneration.ts中定义。
          const prettierOptions: Prettier.Options = {
            parser: "typescript",
            tabWidth: 4,
            singleQuote: true,
            trailingComma: "all",
            printWidth: 120,
            endOfLine: "crlf",
        };
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
      • 第三:文引名支持snake模式了,如表名:HelloUserTest -> hello_user_test.ts
      • 第四:增加了Where,Record,Order,Select的类型预定义
        	  /** 定义where类型 便于使用 */
        	export declare type WhereTaskFile = FindOptionsWhere<TaskFile>;
        	/** 定义Record类型 便于使用 */
        	export declare type RecTaskFile = DeepPartial<TaskFile>;
        	/** 定义Select类型 便于使用 */
        	export declare type SelectTaskFile = FindOptionsSelect<TaskFile>;
        	/** 定义Order类型 便于使用 */
        	export declare type OrderTaskFile = FindOptionsOrder<TaskFile>;
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      如代码:
      	const where: WhereTaskFile  = { id: 100 };
      	const select: SelectTaskFile  = { id: true, name: true, memo: true };
      	const rec:RecTaskFile = await  this.taskRepo.findOne({where, select});
      
      • 1
      • 2
      • 3
      • 第五:命令行的名称我改成了: tmg 简单很多了

    变更记录

    0.1.3

    • 对mysql针对表注释的获取,并在对应的实体类增加了相应的注释说明,其它数据库未加

    0.1.2

    • 更新typeorm版本为0.3.10
    • 修改注释错误
    • 增加字段注释

    0.0.9

    • 更新typeorm版本为0.3.9

    0.0.8

    • 增加表名与(select字段或Order类型定义)

    0.0.6

    • 发布到NPM的版本,增加复制readme.md

    0.0.5

    • 升极依赖库的版本, 主要是将typeorm升级到了0.3.7 部分数据库升级了小版本

    0.0.4

    • 生成的实体文件,增加where和record类型定义,便于使用。这个需要typeorm 0.3.x及以上版本,才有。0.2.x请不要使用。

    0.0.3

    • 工具导出的表名文件名支持snake命令方式 即表名为:sampleTable => sample_table.ts
    • 优化了perttier格式代的规则

    0.0.1

    • 将typeorm-model-generator改为tmg,在命令行输入tmg就可以了
    • 从typeorm-model-generator这个迁移过来,包名改为@zdhsoft/tmg -

    安装与实践

    • 安装
    # 全局安装
    npm install @zdhsoft/tmg -g
    
    • 1
    • 2
    • 命令
    tmg -h 127.0.0.1 -d 你的数据库名 -p 3306 -u root -x 你的数据库密码 -e mysql -o 你的输出目录 --noConfig --cf snake --pv public
    
    • 1
    • 你可以写一个批处理或bash脚本,这样就不用每次输入参数了

    代码

    • npmjs包: https://www.npmjs.com/package/@zdhsoft/tmg
    • 源代码:https://github.com/zdhsoft/typeorm-model-generator
    • 最后,大家可以自己fork,完善自己的功能,使它更强大。欢迎大家点赞加星。
    • 参考文章一:https://blog.csdn.net/kuangshp128/article/details/98062662
    • 参考文章二:https://zdhsoft.blog.csdn.net/article/details/121746302
  • 相关阅读:
    .NET性能优化-快速遍历List集合
    python反序列化分析
    Windows 10 家庭中文版找不到Hyper-V功能解决方法100%解决
    在海底管缆工程中硬质层判断标准是怎样的?
    CH573/CH571低功耗集成BLE 32位微控制器MCU
    数据库 高阶语句
    5个常用的CMD命令
    【RocketMQ】消息的拉取
    FlinkCDC菜鸟教程/演示 MongoDB基于Flink CDC 导入 Elasticsearch
    阿里云海外云服务器5折起,新老用户均可选购(免备案)
  • 原文地址:https://blog.csdn.net/zdhsoft/article/details/126510832