NestJS必备:TypeORM对DB的操作

文章概叙

本文大概1300字,讲的是一些关于TypeORM的基础知识以及在NestJS中使用TypeORM操作DB的例子。

关于TypeORM

TypeORM 是一个ORM框架,它可以运行在 NodeJS、Browser、Cordova、PhoneGap、Ionic、React
Native、Expo 和 Electron 平台上,可以与 TypeScript 和 JavaScript
(ES5,ES6,ES7,ES8)一起使用。

TypeORM的目标是始终支持最新的 JavaScript 特性并提供额外的特性以帮助你开发任何使用数据库的(不管是只有几张表的小型应用还是拥有多数据库的大型企业应用)应用程序。

在NestJS看来,TypeORM是可用于 TypeScript 的最成熟的对象关系映射器 (ORM)。且由于使用 TypeScript 编写,所以可以很好地与 Nest 框架集成。

实体与数据表

在介绍TypeORM的使用之前,需要先介绍下TypeORM是怎么跟我们的DB互动的。

在TypeORM中,存在一类后缀名为 entity.ts 的文件,我们称其为实体类文件,该类型文件记录着我们的字段 以及一些表之间的映射关系。一般结构如下:
在这里插入图片描述

其中,第十一行的 @Entity() 表示我们的表名为traning_plan.

第十四行中,我们创建了一个名字为 traning_plann_name 的字段,且该字段的长度为128,该字段为唯一id.

第十五行我们为这个第十四行的字段起了一个别名为name,我们在代码中要对这个字段做操作的时候,我们都会用name来操作这个字段,且该字段的类型为string。

在这样的情况下,我们就在我们的代码中创建好了一个又一个实体类,分别代表我们数据库中的每一个表。
当我们在配置TypeORM的时候,如果设置了synchronize为true,那么我们就会在DB中重新创建一张又一张新的表,这么一个过程,我们称之为Mapping,也就是映射,所以对于这个开关,我们一般会选择在dev的时候开启,在prod的时候关闭,主打的就是一个安全。。。。
在这里插入图片描述

TypeORM的配置

在使用TypeORM前,照例先贴上包的版本

"typeorm": "^0.3.17",
"@nestjs/typeorm": "^10.0.0",

由于我们一般使用的是NestJS的脚手架安装项目,所以不需要纠结TypeORM的版本。

在开发的概念中,TypeORM属于一个module,所以我们会将在 app.module.ts中去引入TypeORM模块。具体代码如下:

@Module({imports: [// TypeORM configurationTypeOrmModule.forRoot({type: 'postgres',host: database.host,port: database.port,username: database.username,password: database.password,database: database.name,autoLoadEntities: true,synchronize: !isInCXEnvironment && process.env.NODE_ENV === 'development',ssl: false, }),
})

首先,TypeORM会导出TypeOrmModule,并且内含一个forRoot的方法使我们去配置database的参数。

我们除了需要配置数据库的类型以及账号密码等,还需要注意synchronize参数,表示是否将本地的配置Mapping到DB上,可以理解为是否根据代码中的字段来创建表,要慎重!!!很容易就将线上的字段干掉了。

而autoLoadEntities是属于NestJS中特有的一个属性,表示是否自动加载实体类。一般都是开着的,由于本文是NestJS中去使用TypeORM,所以也就提一嘴这个属性。

使用TypeORM

前面的例子中已经介绍了TypeORM的一些基础知识以及如何配置,现在介绍下在NestJS项目中如何使用TypeORM操作我们的数据库。
当我们的项目中使用了TypeORM的时候,启动项目后 ,我们会在控制台中看到如下的提示,表示我们已经链接到了DB中。
在这里插入图片描述

在NestJS的代码结构中,我们对于DB的操作,会放在services文件中,所以接下来,我们需要在services中对DB进行操作。

@Injectable()
export class PlanService {constructor(@InjectRepository(Plan)private planRepository: Repository<Plan>,
) {}
}

其中,我们使用了第四行的InjectRepository去注解我们的实体

在使用了第五行的实例化对象后,我们可以在后续的代码中使用planRepository去操作我们的DB了。

举一个简单的例子,下面的代码表示了我们去查找到db中最符合的一条数据。

return await this.repository.findOne({where: { id: id }
});

ok,本文到此结束,感谢各位看官。

对于其他的配置,觉得有需要记下来的,则会诞生出别的博客,本文主要让一些新手了解TypeORM

公众号链接
在这里插入图片描述

求关注~希望能帮到你

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2980171.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Kubectl常见排查pod问题命令

一.查看命名空间pod及其日志 #查看命名空间pod kubectl get pods -n <命名空间名称> #该命令不加-n命名空间名称&#xff0c;默认是查看default命名空间的pod#查看对应pod的日志kubectl logs -f <pod-name> -n <namespace>#同样的如果查看的是default命名空…

jasypt组件死锁bug案例分享

事故描述 1、上午9.55发布了一个Apollo动态配置参数&#xff1b; 2、片刻后&#xff0c;服务器接口开始出现大量的超时告警&#xff0c;似乎是某资源被耗尽不足分配&#xff1b; 3、正值业务请求高峰的上午十点&#xff08;平台上午10点会有一些活动会拉一波用户流量&#x…

使用eNSP进行路由策略与引入实验

一、实验拓扑 二、实验要求 1、按照图示配置 IP 地址&#xff0c;R1&#xff0c;R3&#xff0c;R4 上使用 oopback 口模拟业务网段&#xff0c; 2、R2&#xff0c;R3 和 R4 运行 OSPF&#xff0c;各自协议内部互通2R1和R2运丁RIPv2 3、在 RIP 和 OSPF 间配黑双向路由引入&#…

按照以下步骤使用Transformer模型

“Transformer”是一种深度学习模型架构&#xff0c;用于处理序列数据&#xff0c;特别是在自然语言处理&#xff08;NLP&#xff09;领域中表现出色。它由Google Brain团队于2017年提出&#xff0c;并在机器翻译任务中取得了突破性的成果。Transformer的核心思想是完全基于自注…

捕捉信号的处理

文章目录 信号捕捉 信号捕捉 信号捕捉是进程从内核态返回用户态时会对信号进行检测处理。 如果信号的处理动作是用户自定义函数,在信号递达时就调用这个函数,这称为捕捉信号。由于信号处理函数的代码是在用户空间的,处理过程比较复杂,举例如下: 用户程序注册了SIGQUIT信号的处…

退役军人档案管理系统|DW-S403是一套成熟系统

退役军人档案管理系统是一种专门用于管理退役军人档案的信息系统&#xff0c;旨在提高退役军人档案的管理效率和利用价值。该系统采用先进的信息技术手段&#xff0c;对退役军人的档案进行全面、精准、高效的管理&#xff0c;为退役军人的就业、社保、优抚安置等提供有力支持。…

机器学习(XgBoost)预测顶和底

之前的文章中&#xff0c;我们对中证1000指数进行了顶和底的标注。这一篇我们将利用这份标注数据&#xff0c;实现机器学习预测顶和底&#xff0c;并探讨一些机器学习的原理。 我们选取的特征非常简单–上影线和WR&#xff08;William’s R&#xff09;的一个变种。选取这两个…

【python】python新闻文本数据统计和聚类 (源码+文本)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

Appium一本通

Appium介绍 概念&#xff1a;Appium是一个移动App(手机应用)自动化工具。 用途&#xff1a;重复性任务、爬虫、自动化测试。 特点&#xff1a;开源免费、多平台支持(ios\android)、多类型支持(native\webview)、类selenium支持多语言(java\python\js\ruby) Appium原理 三个主…

如何使用trackerjacker映射和跟踪分析WiFi网络设备

关于trackerjacker trackerjacker是一款针对WiFi无线网络的强大安全工具&#xff0c;该工具功能类似于Nmap&#xff0c;可以帮助广大研究人员映射未连接的WiFi网络&#xff0c;并进行设备跟踪。 该工具基于IEEE 802.11实现其功能&#xff0c;支持通过原始802.11实现网络映射和…

Prometheus blackbox_exporter 黑盒监控

概述 在监控体系里面&#xff0c;通常我们认为监控分为&#xff1a;白盒监控、黑盒监控。 黑盒监控&#xff1a;主要关注的现象&#xff0c;一般都是正在发生的东西&#xff0c;例如出现一个告警&#xff0c;业务接口不正常&#xff0c;那么这种监控就是站在用户的角度能看到的…

[vite] ts写配置根目录别名

参考:配置 Vite | Vite 写对象的形式吧 import { defineConfig } from vite import vue from vitejs/plugin-vue import path from path// https://vitejs.dev/config/ export default defineConfig({plugins: [vue()],resolve: {alias: {"": path.resolve(__dirname…

Datawhale ChatGPT基础科普

根据课程GitHub - datawhalechina/hugging-llm: HuggingLLM, Hugging Future. 摘写自己不懂得一些地方&#xff0c;具体可以再到以上项目地址 LM&#xff1a;这是ChatGPT的基石的基石。 Transformer&#xff1a;这是ChatGPT的基石&#xff0c;准确来说它的一部分是基石。 G…

2024新算法角蜥优化算法(HLOA)和经典灰狼优化器(GWO)进行无人机三维路径规划设计实验

简介&#xff1a; 2024新算法角蜥优化算法&#xff08;HLOA&#xff09;和经典灰狼优化器&#xff08;GWO&#xff09;进行无人机三维路径规划设计实验。 无人机三维路径规划的重要意义在于确保飞行安全、优化飞行路线以节省时间和能源消耗&#xff0c;并使无人机能够适应复杂…

数据持久化第四课-EF的基本使用

数据持久化第四课-EF的基本使用 一.预习笔记 1.数据实体模型概述 ORM全称是“对象-关系映射”&#xff08;Object-Relation Mapping&#xff09; ORM是将关系数据库中的数据用对象的形式表现出来&#xff0c;并通过面向对象的方式将这些对象组织起来&#xff0c;实现系统业务…

理发师问题的业务建模方案

背景 题目&#xff1a; 假设有一个理发店只有一个理发师&#xff0c;一张理发时坐的椅子&#xff0c;若干张普通椅子顾客供等候时坐。没有顾客时&#xff0c;理发师睡觉。顾客一到&#xff0c;叫醒理发师 。如果理发师没有睡觉&#xff0c;而在为别人理发&#xff0c;他就会坐…

Chrome 网络调试程序 谷歌网络调试 network

目录 1.网络面板总览2.概况了解3.Waterfall接口排队等待时间4.关注请求接口的Size,可能是占据内存溢出的接口5.过滤器一栏 fetch/xhr 什么意思6. Stalled 什么意思7.Queueing 什么意思8.Queueing和Stalled之间什么关系9.为什么会有阻塞状态10.Time列是pending 什么意思 1.网络面…

实现Spring底层机制(二)

文章目录 阶段2—封装bean定义信息到Map1.代码框架图2.代码实现1.文件目录2.新增注解Scope存储单例或多例信息Scope.java3.修改MonsterService.java指定多例注解4.新增bean定义对象存储bean定义信息BeanDefinition.java5.修改pom.xml增加依赖6.修改容器实现bean定义信息扫描Sun…

基于Vue+ElementPlus自定义带历史记录的搜索框组件

前言 基于Vue2.5ElementPlus实现的一个自定义带历史记录的搜索框组件 效果如图&#xff1a; 基本样式&#xff1a; 获取焦点后&#xff1a; 这里的历史记录默认最大存储10条&#xff0c;同时右侧的清空按钮可以清空所有历史记录。 同时搜索记录也支持点击搜索&#xff0c;按…

Linux给磁盘扩容(LVM方式)

Linux给磁盘扩容&#xff08;LVM方式&#xff09; 最近测试性能&#xff0c;在本地打数据时&#xff0c;发现磁盘空间不足&#xff0c;于是想手动给/挂载点添加空间。这里介绍通过LVM方式快速给磁盘扩容。 LVM:是一种技术&#xff0c;方便管理磁盘。如果不用LVM&#xff0c;那…