奉上最新代码: nestjs服务demo代码=》gitee地址、github地址

nodejs的ORM–sequelize

笔者在使用koa2开发后端服务的时候用的ORM框架是sequelize,觉得挺好用的,也做了分享=》node从入门到放弃系列之(12)丝滑的操作数据库及表模型

具体的就不再介绍,想了解的自己点进去看看

nestjs的ORM–typeorm

nestjs推荐的是typeorm,并且在文档中也是着重介绍,同时网络上也有很多介绍。

我就简单说下我用typeorm的感受以及为啥最后确定使用sequelize。

评价typeorm

找了一篇知乎上的评价,如何评价TypeORM?。
对我来说没发现啥亮眼的点,可能是之前用过别的ORM框架的原因吧!

使用感受

  • 可以从现有数据库生成模型,但无法生成对应关系,如一对一、一对多、多对一。
  • 无法自动添加创建时间、修改时间、删除时间。

由于使用typeorm是在一两周前,所以只记得这两点感受了。
第一点导致生成的模型实体不能马上用,需要手动修改,手动修改很容易出错,导致效率低下。
第二点导致在每次操作数据时后端都要手动操作相应时间,增加代码量和处理时间。

以上两点可能是因为我水平不够导致未充分开发其原有功能导致,欢迎有知道的大佬评论指导,也算是补充下这一方面的社区资料

nestjs的ORM–sequelize

原本我还打算凑合用typeorm下,但是在最后关头发现sequelize-typescript-generator(从现有数据库生成模型)扩展后我转向了sequelize。

nestjs官网对sequelize的使用文档:sequelize-integration
nestjs也开发了一个依赖 @nestjs/sequelize ,使得sequelize在nestjs里使用的更顺滑了。

从现有数据库生成模型-sequelize-typescript-generator

使用sequelize-typescript-generator扩展,生成数据库中已有的表的模型实体,相关配置。重点说下下面几个配置:

配置 解释
-C, --case 字段的命名规则,驼峰\下划线\其他
-m, --timestamps 时候自动补充时间。这样调用时就不需要每次手动修改创建、修改、删除时间了
-a, --associations-file 数据库关系配置文件路径(一对一,一对多,多对多)。
由于扩展还没像sequelize-auto那么强大会自己生成关系,所以需要自己添加关系,然后扩展读取使用

有啥自己要用的自己看下,没有的话去git提问题,不过作者好像回复的不是很积极

以我的为例,命令如下:

npx stg -D mysql -h localhost -p 3306 -d koa2_server -u root -x password -i -C camel -o ./src/db/models -c -m -a ./src/db/associations.csv

模型实体目录

使用自动生成的表模型

 npm install --save @nestjs/sequelize sequelize sequelize-typescript mysql2

安装完成后,我们就可以将SequelizeModule导入AppModule,表模型导入SequelizeModule

// app.module.jsimport { Module, MiddlewareConsumer, NestModule } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { SequelizeModule } from '@nestjs/sequelize';
import * as models from '/@/db/models/index';
import { user } from '/#model/user';// 导入所有模型
const allModels = [];
for (const key in models) {if (Object.prototype.hasOwnProperty.call(models, key)) {const element = models[key];allModels.push(element);}
}
@Module({imports: [SequelizeModule.forFeature([user]),SequelizeModule.forRoot({dialect: 'mysql',host: 'localhost',port: 3306,username: 'root',password: 'password',database: 'koa2_server',models: allModels,logging: true, // 关闭打印// autoLoadModels: true,// synchronize: true,define: {timestamps: true, // 是否自动创建时间字段, 默认会自动创建createdAt、updatedAtparanoid: true, // 是否自动创建deletedAt字段createdAt: 'createTime', // 重命名字段updatedAt: 'updateTime',deletedAt: 'deleteTime',underscored: true, // 开启下划线命名方式,默认是驼峰命名freezeTableName: true, // 禁止修改表名charset: 'utf8mb4',},}),],controllers: [AppController],providers: [AppService],
})
export class AppModule {}

forRoot()里得配置不懂得可以看下这一片,里面有sequelize配置项介绍

导入后,在服务者里使用模型经常数据的操作

// app.service.tsimport { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/sequelize';
import { user } from '/#model/user';@Injectable()
export class AppService {constructor(@InjectModel(user)private userModel: typeof user) {}async findAll(): Promise<user[]> {return this.userModel.findAll();}
}// app.controller.ts
import { Controller, Get, Post } from '@nestjs/common';
import { AppService } from './app.service';@Controller()
export class AppController {constructor(private readonly appService: AppService) {}@Get()getHello() {return this.appService.findAll();}
}

现在我们就能在nestjs里使用sequelize了,是不是觉得很方便。
直接操作navicat操作数据库,如果有关系的变化修改下associations.csv文件,然后npm命令导出最新模型覆盖旧的,其他都没变化,是不是效率立马提高了不少。

不足

整个流程下来还是挺完美的,但是在使用过程中我也发现了写问题

  • 到处已有表模型时,由于扩展是老外写的,所以字段的中文注释会乱码,我看github上也有issues提问,但是好像还没修改
  • 由于直接使用数据库到处的表模型,所以sequelize提供的例如自动填写uuid,数据的校验啥的复杂修饰符都不能用了。如果想用就得自己修改,这样就不是全自动了,我选择放弃。让后端存数据前进行处理。
  • 别的我暂时还有想到,可能是需求简单吧!等有了再加精!!

最后看本问代码片段觉得累的,可以直接去我项目开源地址上看:nest gitee地址nest github地址

觉得项目写的不错儿的,有值得学习的地方,欢迎Star!!!这是我坚持学习的动力,谢谢!!

看完如果还有啥不懂得,或者对我这个方法有意见得欢迎评论区留言。
觉得写的不错的可以动动小手一键三连下。

nestjs 优秀的ORM框架sequelize操作数据库相关推荐

  1. koa+ts+mysql后台开发——(五)使用orm框架sequelize操作数据库,自定义格式校验、统一处理返回信息、分页格式

    文章目录 前言 一.引包 二.初始化sequelize 三.添加模型层 四.添加服务层 五.添加控制层 (增删改查) 六.自定义数据校验 七.统一处理返回信息 八.统一处理分页格式 九.在路由中引入导 ...

  2. node本地连接服务器的数据库_基于Node.jsORM框架Sequelize的数据库迁移一

    开课吧Web前端教程 前言 在日常的后端项目开发中,我们经常需要和数据库打交道.在这个过程中,我们需要创建数据库.表还有一些测试数据.许多时候,因为业务需求的变更导致的数据库结构的变化,需要修改数据库 ...

  3. Node.js ORM框架-sequelize

    Node.js ORM框架-sequelize 什么是ORM 什么是"持久化" 什么是持久层 ORM技术特点 什么是Sequelize Sequelize特点 使用方式 安装库 配 ...

  4. Node.js ORM 框架 Sequelize 重要更新 v5 发布

    Node.js ORM 框架 Sequelize v5 已正式发布,这也是 v4 推出一年多后的主要版本. Sequelize 是一个基于 promise 的 Node.js ORM,目前支持 Pos ...

  5. MyBatis是持久化层框架(SQL映射框架)-操作数据库

    MyBatis是持久化层框架(SQL映射框架)-操作数据库 1.环境搭建 1).创建一个java工程: 2).创建测试库,测试表,以及封装数据的javaBean,和操作数据库的dao接口 创建表:自己 ...

  6. Nodejs ORM框架Sequelize

    Nodejs ORM框架Sequelize (模型,关联表,事务,循环,及常见问题) 建立连接 const Sequelize = require('sequelize'); const sequel ...

  7. php sequelize,egg.js整合数据库ORM框架Sequelize

    在上篇文章中我们写了egg.js怎么连接mysql数据库, 而在一些较为复杂的应用中,我们可能会需要一个 ORM 框架来帮助我们管理数据层的代码.Java中有Mybatis.Hibernate.Spr ...

  8. Android ORM 框架:GreenDao 数据库升级

    本文作者:Speedy CSDN 专栏:blog.csdn.net/speedystone 掘金专栏:juejin.im/user/57e082- 前言 在 Android ORM 框架:GreenD ...

  9. node用express写后端restful接口实战三:sequelize操作数据库:模型(Model)、迁移(Migration)与种子(Seeders)

    一.创建模型与迁移 https://github.com/sequelize/cli 有了数据库,里面还要有 数据表.这次的项目非常简单,现在要建的表也只有一张,名字叫做 articles.使用代码操 ...

最新文章

  1. AI时代竟有智能化鸿沟,具备哪些条件才能跨过?
  2. 简明python教程 豆瓣-Python 有哪些入门学习方法和值得推荐的经典教材?
  3. 由于c语言是由字符流组成的,C语言试题及答案
  4. FPGA是如何搭建的
  5. java 统计图 mysql_java实现各种数据统计图(转)
  6. 堆(Heap)大根堆、小根堆
  7. 科沃斯机器人阿尔法怎么样_科沃斯阿尔法扫地机器人,实用的才是最好的
  8. python可以实现的小游戏_今天教小白用Python实现一款小游戏!最适合装逼的神技!亲测可用...
  9. 记一下vue.js事件的修饰等问题
  10. 字和字节和位和16进制数的关系
  11. 小白菜飘过计算机三级数据库
  12. Linux 读书笔记 一
  13. 如何在ionic5 release版本降级安装ionic3
  14. 诚之和:举行虚拟婚礼、养独角兽、在月球上漫步 我们在元宇宙中能实现这些梦想
  15. ChatGPT - 横看成岭侧成峰
  16. html新闻发布系统源码,新闻发布系统源代码
  17. 【笔记】《单片机原理与应用》(底部原文下载链接)
  18. R语言学习笔记(六):OLS回归
  19. I-PEX线束加工 LVDS CABLE液晶屏线 笔记本驱屏线 测试线
  20. 重装搜狗五笔输入法总是提示要求重…

热门文章

  1. 【WPS绘图】用PPT画立方八面体单晶
  2. 自考管理系统中计算机应用笔记,自考“管理系统中计算机应用”笔记(15)
  3. python考试等级划分_考试等级分类
  4. Ansys的电磁场分析和系统电路仿真软件Electronics 2023版本下载和安装教程
  5. 2022年1月17号~19号
  6. 在TutorABC学英语 进步让你看得见
  7. python 在线零售分析
  8. C语言:L1-061 新胖子公式 (10 分)
  9. USB 3.x之所以有“超速”的表现,完全得益于技术的改进。
  10. ArcGIS Pro 中的编辑器