nestjs 优秀的ORM框架sequelize操作数据库
奉上最新代码: 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操作数据库相关推荐
- koa+ts+mysql后台开发——(五)使用orm框架sequelize操作数据库,自定义格式校验、统一处理返回信息、分页格式
文章目录 前言 一.引包 二.初始化sequelize 三.添加模型层 四.添加服务层 五.添加控制层 (增删改查) 六.自定义数据校验 七.统一处理返回信息 八.统一处理分页格式 九.在路由中引入导 ...
- node本地连接服务器的数据库_基于Node.jsORM框架Sequelize的数据库迁移一
开课吧Web前端教程 前言 在日常的后端项目开发中,我们经常需要和数据库打交道.在这个过程中,我们需要创建数据库.表还有一些测试数据.许多时候,因为业务需求的变更导致的数据库结构的变化,需要修改数据库 ...
- Node.js ORM框架-sequelize
Node.js ORM框架-sequelize 什么是ORM 什么是"持久化" 什么是持久层 ORM技术特点 什么是Sequelize Sequelize特点 使用方式 安装库 配 ...
- Node.js ORM 框架 Sequelize 重要更新 v5 发布
Node.js ORM 框架 Sequelize v5 已正式发布,这也是 v4 推出一年多后的主要版本. Sequelize 是一个基于 promise 的 Node.js ORM,目前支持 Pos ...
- MyBatis是持久化层框架(SQL映射框架)-操作数据库
MyBatis是持久化层框架(SQL映射框架)-操作数据库 1.环境搭建 1).创建一个java工程: 2).创建测试库,测试表,以及封装数据的javaBean,和操作数据库的dao接口 创建表:自己 ...
- Nodejs ORM框架Sequelize
Nodejs ORM框架Sequelize (模型,关联表,事务,循环,及常见问题) 建立连接 const Sequelize = require('sequelize'); const sequel ...
- php sequelize,egg.js整合数据库ORM框架Sequelize
在上篇文章中我们写了egg.js怎么连接mysql数据库, 而在一些较为复杂的应用中,我们可能会需要一个 ORM 框架来帮助我们管理数据层的代码.Java中有Mybatis.Hibernate.Spr ...
- Android ORM 框架:GreenDao 数据库升级
本文作者:Speedy CSDN 专栏:blog.csdn.net/speedystone 掘金专栏:juejin.im/user/57e082- 前言 在 Android ORM 框架:GreenD ...
- node用express写后端restful接口实战三:sequelize操作数据库:模型(Model)、迁移(Migration)与种子(Seeders)
一.创建模型与迁移 https://github.com/sequelize/cli 有了数据库,里面还要有 数据表.这次的项目非常简单,现在要建的表也只有一张,名字叫做 articles.使用代码操 ...
最新文章
- AI时代竟有智能化鸿沟,具备哪些条件才能跨过?
- 简明python教程 豆瓣-Python 有哪些入门学习方法和值得推荐的经典教材?
- 由于c语言是由字符流组成的,C语言试题及答案
- FPGA是如何搭建的
- java 统计图 mysql_java实现各种数据统计图(转)
- 堆(Heap)大根堆、小根堆
- 科沃斯机器人阿尔法怎么样_科沃斯阿尔法扫地机器人,实用的才是最好的
- python可以实现的小游戏_今天教小白用Python实现一款小游戏!最适合装逼的神技!亲测可用...
- 记一下vue.js事件的修饰等问题
- 字和字节和位和16进制数的关系
- 小白菜飘过计算机三级数据库
- Linux 读书笔记 一
- 如何在ionic5 release版本降级安装ionic3
- 诚之和:举行虚拟婚礼、养独角兽、在月球上漫步 我们在元宇宙中能实现这些梦想
- ChatGPT - 横看成岭侧成峰
- html新闻发布系统源码,新闻发布系统源代码
- 【笔记】《单片机原理与应用》(底部原文下载链接)
- R语言学习笔记(六):OLS回归
- I-PEX线束加工 LVDS CABLE液晶屏线 笔记本驱屏线 测试线
- 重装搜狗五笔输入法总是提示要求重…
热门文章
- 【WPS绘图】用PPT画立方八面体单晶
- 自考管理系统中计算机应用笔记,自考“管理系统中计算机应用”笔记(15)
- python考试等级划分_考试等级分类
- Ansys的电磁场分析和系统电路仿真软件Electronics 2023版本下载和安装教程
- 2022年1月17号~19号
- 在TutorABC学英语 进步让你看得见
- python 在线零售分析
- C语言:L1-061 新胖子公式 (10 分)
- USB 3.x之所以有“超速”的表现,完全得益于技术的改进。
- ArcGIS Pro 中的编辑器