NestJS:理解ORM(Object Relational Mapping)

news2025/1/19 3:11:46

一、理解ORM(Object Relation Mapping)

        ORM是对象—关系映射(Object/Relation Mapping,ORM)是为了解决面向对象与关系数据库存在的互不匹配现象而产生的技术。业务实体在内存中表现为对象,在数据库中表现为关系数据。ORM通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。本质就是将数据表映射为对象类,从一种形式转换到另外一种形式。使用ORM技术,将在数据库中直接进行的原始操作演变为对类的属性和方法的操作,而间接更改数据表的数据。 一般情况下,一个持久化类和一个表对应,类的每个实例对应表中的一条记录,类的每个属性对应表的每个字段。 

二、ORM技术特点
        1、提高了开发效率。由于ORM可以自动对Entity对象与数据库中的Table进行字段与属性的映射,所以我们实际可能已经不需要一个专用的、庞大的数据访问层。 
        2、ORM提供了对数据库的映射,不用sql直接编码,能够像操作对象一样从数据库获取数据。

三、ORM优缺点

        ORM的缺点是会牺牲程序的执行效率和会固定思维模式。
        从系统结构上来看,采用ORM的系统一般都是多层系统,系统的层次多了,效率就会降低。ORM是一种完全的面向对象的做法,而面向对象的做法也会对性能产生一定的影响。
        在我们开发系统时,一般都有性能问题。性能问题主要产生在算法不正确和与数据库不正确的使用上。ORM所生成的代码一般不太可能写出很高效的算法,在数据库应用上更有可能会被误用,主要体现在对持久对象的提取和数据的加工处理上,如果用上了ORM,程序员很有可能将全部的数据提取到内存对象中,然后再进行过滤和加工处理,这样就容易产生性能问题。 
        在对对象做持久化时,ORM一般会持久化所有的属性,有时这是不希望的。 
        但ORM是一种工具,工具确实能解决一些重复、简单的劳动。这是不可否认的。但我们不能指望工具能一劳永逸的解决所有问题,有些问题还是需要特殊处理的,但需要特殊处理的部分对绝大多数的系统,应该是很少的。
        总得来说,ORM的作用就是完成对象与关系型数据库的映射,封装底层与数据库的交互,并且很多都提供了强大的附加功能,比如持久化。本人认为对于前端使用nodejs操作数据库比较合适,nodejs去连接关系型数据库,像操作对象一样操作数据库,对于性能要求不高的项目,适合前端人员快速上手。

四、理解TypeORM

TypeORM - 一个 ORM 框架 | TypeORM 中文文档 | TypeORM 中文网

TypeORM 是一个ORM框架,它可以运行在 NodeJS、Browser、Cordova、PhoneGap、Ionic、React Native、Expo 和 Electron 平台上,可以与 TypeScript 和 JavaScript (ES5,ES6,ES7,ES8)一起使用。 它的目标是始终支持最新的 JavaScript 特性并提供额外的特性以帮助你开发任何使用数据库的(不管是只有几张表的小型应用还是拥有多数据库的大型企业应用)应用程序。

不同于现有的所有其他 JavaScript ORM 框架,TypeORM 支持 Active Record 和 Data Mapper 模式,这意味着你可以以最高效的方式编写高质量的、松耦合的、可扩展的、可维护的应用程序。

五、nodejs常见的orm工具

prisma、sequelize、TypeORM(nodejs官方推荐使用的ORM)

NestJS:TypeORM 连接mysql数据库,增删改查_snow@li的博客-CSDN博客

六、Java常见的ORM工具

Hibernate、iBatis、speedframework、MyBatis、Bee、JOOQ

MyBatis学习总结(一)——ORM概要与MyBatis快速起步 - 菜鸟学院

七、ChatGpt回答

ChatGpt回答:

ORM(Object-Relational Mapping)是一种编程技术,用于将对象模型和关系数据库之间的数据进行映射。ORM框架可以自动将对象转换为数据库中的表,以及将表中的数据转换为对象。ORM的主要目的是简化开发人员与数据库之间的交互,减少手动编写SQL语句的工作量,提高开发效率和代码可维护性。

ORM框架通常提供了一些常见的操作方法,如增删改查等,开发人员可以通过这些方法来操作数据库,而不需要手动编写SQL语句。ORM框架还可以处理数据库中的关系,如一对多、多对多等关系,使得开发人员可以更方便地处理数据之间的关联。

ORM框架的优点包括:

简化开发:ORM框架可以减少手动编写SQL语句的工作量,提高开发效率。

提高代码可维护性:ORM框架可以将数据库操作封装在框架中,使得代码更易于维护。

支持多种数据库:ORM框架通常支持多种数据库,使得开发人员可以更方便地切换数据库。

处理关系:ORM框架可以处理数据库中的关系,使得开发人员可以更方便地处理数据之间的关联。

防止SQL注入:ORM框架通常会对用户输入进行处理,防止SQL注入等安全问题。

八、相关概念

8.1、持久化

        数据持久化一般指将内存中的数据或对象存储到可长期保存的某种介质上,以使其存活时间比创建该对象的进程时间长。

  在对数据或对象持久化后,可以重新获取并能保证在没有对其进行任何改动的情况下,与持久化之前一样,

  一般持久化的实现通过各种关系数据库来完成。

8.2、映射文件

        其是实体对象与数据库关系表之间相互转换的重要依据,一般来说,一个映射文件对应数据库中一个关系表,关系表之间的关联关系也在映射文件中进行配置。

九、本文关键词

ORM、持久化、对象关系映射、缓存、延迟加载、typeorm、nestjs

十、欢迎交流指正,关注我,一起学习。

十一、参考链接

19.Spring中ORM关系对象映射持久化数据 - 简书

从单体架构到分布式架构之四:数据持久化,ORM 框架之 Mybatis

理解ORM和数据持久化_Iaouei的博客-CSDN博客

NestJS:TypeORM 连接mysql数据库,增删改查_snow@li的博客-CSDN博客

技术胖-NestJS 快速入门教程

实体 | TypeORM 中文文档 | TypeORM 中文网

Sequelize 简介 | Sequelize 中文文档 | Sequelize 中文网

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

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

相关文章

【网络技术】HULK攻击实验

一、重要声明 请勿攻击公网!请勿攻击公网!请勿攻击公网! 一切责任自负!一切责任自负!一切责任自负! 二、工具介绍 HULK(Http Unbearable Load King,字面意思是“不能承受的HTTP&a…

项目三:双人骰子

项目三:双人骰子 文章目录 项目三:双人骰子一、导入(5分钟)学习目的 二、新授(65分钟)1.预展示结果(5分钟)2.本节课所用的软硬件(5分钟)3.硬件介绍(1分钟)4.图形化块介绍(1分钟)5.单个模块的简单使用(1分钟)6.双人骰子编程逻辑分析(30分钟)7.…

Faster RCNN系列——RoI Pooling与全连接层

在RPN网络中,已经计算过一次类别真值与类别预测值、偏移量真值与偏移量预测值之间的损失值,但这里的类别预测值只包含两类:前景和背景。 RPN网络输出的Proposal作为生成的区域,继续在后续的RoI Pooling和全连接层中进行分类与回归…

企业电子招投标系统源码之电子招投标系统建设的重点和未来趋势

项目说明 随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范,以及…

性能优化3-分帧寻路+寻路任务统一管理

前言 当项目里的地图越来越大,一些性能上的问题开始逐渐出现,比如寻路。玩家在操控角色移动的时候,指引需要实时更新,同时一些npc也需要做移动,容易出现cpu占用率短时间过高,甚至掉帧的情况。 去年底的时候…

ChatGPT,音乐,与数据库

小编君是个不务正业,喜欢搞跨界,干啥啥不成的DBA,大概在十一年前就有个不成熟的妄念,能否用计算机来写音乐? ▌用ChatGPT来搞音乐? 音乐是一个个的音符,按照乐理规则排列的。音符之间是否和谐…

横扫一线大厂面试的高并发笔记到底有多硬核?

处处需要高并发 “为什么Java面试必问高并发?” 这个问题已经让程序员们倍感头疼,尤其是想要跳槽到更大公司的程序员,能否漂亮的回答高并发的问题已经成为求职者是否是一个优秀程序员的评判标准,大厂面试尤为明显。 不得不说&am…

springMvc(二)

一、SSM整合 前面我们已经把 Mybatis 、 Spring 和 SpringMVC 三个框架进行了学习,今天主要的内容就是把这三个 框架整合在一起完成我们的业务功能开发,具体如何来整合,我们一步步来学习。 1.1 流程分析 (1) 创建工程 创建一个Maven的we…

BUUCTF-PWN-ciscn_2019_n_1

1.溢出到shell位置 下载文件 checksec file 发现是64位的 然后 放入ida 查看字符串 发现 cat flag 然后看看 F5反编译 我们发现了system 然后get()函数 我们可以使用栈溢出 我们看看 v1函数的地址 是30h 然后是64位的 所以 基地址是8字节 我们开始查看 system的地址 所以…

Web3 营销:项目方如何使用空投奖励以及激励真实用户

Apr. 2023, Daniel 在GameFi中,举行成功的空投活动是最难做到的事情之一。 虽然今年Arbitrum和Blur的活动再次使空投成为一个热门话题,但通过空投赚取收益造成了一个机器人问题,即空投者使用多个账户来进入游戏系统。 Trading volume on Bl…

【LeetCode】剑指 Offer 61. 扑克牌中的顺子 p298 -- Java Version

题目链接:https://leetcode.cn/problems/bu-ke-pai-zhong-de-shun-zi-lcof/ 1. 题目介绍(61. 扑克牌中的顺子) 从若干副扑克牌中随机抽 5 张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身…

活动需求中灵活使用Redis提升生产力

抽奖 一堆用户参与进来,然后随机抽取几个幸运用户给予实物/虚拟的奖品;此时,开发人员就需要写上一个抽奖的算法,来实现幸运用户的抽取;其实我们完全可以利用Redis的集合(Set),就能轻…

汽车CAN、LIN汇总

目录: 一、准备知识 1、什么是CAN 2、汽车网络发展时间轴 3、如何通信 4、CAN总线结构 1)ISO 11898 2)CAN 和 J1850的比较 3)CAN 和 UART的比较 5、关于节点 1)什么是节点 2)节点:报文传…

Jdbc开发结构

一、导入jar包,放置lib目录下,需要的有: (1)alibaba连接池(druid) (2)apache工具类(commons-dbutils&…

网络协议-HTTP入门和基础工具链

Http协议介绍 发明者:蒂姆伯纳斯-李 英国计算机科学家(1955-) 万维网(1990HTTP协议) 世界第一个浏览器 第一个服务端程序 创办MIT人工智能实验室 HTTP协议 超文本传输协议(Hyper Text Trabsfer Prot…

一文带你搞清 ChatGPT 与 Azure OpenAI 的区别

这两周是我从2017年开始全职涉入 NLP 领域后最忙的两周,无数的同事和客户都在向我提出一个询问:ChatGPT 可以帮到我们什么? 特别是在2023年3月31日我做了一场微软 Azure OpenAI [布局助力企业]拥抱新智能时代的演讲之后,这几天我…

信号系统中使用的继电器

继电器是什么 继电器是一种电气开关,它使用电磁力来控制一个或多个电气电路的操作。继电器通常由电磁铁、触点和弹簧等部件组成。当电磁铁被激活时,它会产生磁场,吸引或释放触点,从而打开或关闭电路。 继电器的分类 继电器分为…

CSS学习(5) - 布局

文章首发于我的个人博客:欢迎大佬们前来逛逛 文章目录 CSS布局display属性width和max-widthposition 属性溢出浮动和清除floatclear 布局案例 CSS布局 display属性 display 属性是CSS布局的最重要的属性。 display属性规定是否/如何显示元素。 display元素通常与…

Python词云

词云图wordcloud 1.安装第三方库 j i e b a 库、 m a t p l o t l i b 、 w o r d c l o u d 库 jieba库、matplotlib、wordcloud库 jieba库、matplotlib、wordcloud库 2.过程 1.使用 j i e b a jieba jieba 库对数据进行分词整理,转为 t x t txt txt文件&#…

AI和ML:数据中心的新前沿创新和优化

数据中心现在正在将人工智能(AI)和机器学习(ML)技术集成到其基础架构中,以保持竞争力。通过在传统数据中心架构中实施人工智能驱动层,企业可以创建自主数据中心,无需人工干预即可优化和执行通用数据工程任务。 随着对数据处理和存储的需求持续…