NestJS:理解ORM(Object Relational Mapping)

简介: NestJS:理解ORM(Object Relational Mapping)

一、理解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 RecordData 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

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

相关实践学习
体验RDS通用云盘核心能力
本次实验任务是创建一个云数据库RDS MySQL(通用云盘),并通过云服务器ECS对RDS MySQL实例进行压测,体验IO加速和IO突发带来的性能提升;并通过DMS执行DDL,将数据归档到OSS,再结合云盘缩容,体验数据归档带来的成本优势。
相关文章
|
3月前
|
SQL 存储 数据库
|
算法 数据可视化 机器人
Object SLAM: An Object SLAM Framework for Association, Mapping, and High-Level Tasks 论文解读
Object SLAM: An Object SLAM Framework for Association, Mapping, and High-Level Tasks 论文解读
84 0
|
数据库
数据库驱动及ORM(Object Relational Mapper)模块汇总整理
数据库驱动及ORM(Object Relational Mapper)模块汇总整理
110 0
数据库驱动及ORM(Object Relational Mapper)模块汇总整理
|
Java 数据库 Python
数据库驱动及ORM(Object Relational Mapper)模块汇总整理
数据库驱动及ORM(Object Relational Mapper)模块汇总整理
94 0
数据库驱动及ORM(Object Relational Mapper)模块汇总整理
|
编解码 NoSQL Java
Introducing Redisson Live Objects (Object Hash Mapping)
文章来源于阿里云 MVP顾睿。
1212 0
|
13天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
54 4
|
1月前
|
Java
Java Object 类详解
在 Java 中,`Object` 类是所有类的根类,每个 Java 类都直接或间接继承自 `Object`。作为所有类的超类,`Object` 定义了若干基本方法,如 `equals`、`hashCode`、`toString` 等,这些方法在所有对象中均可使用。通过重写这些方法,可以实现基于内容的比较、生成有意义的字符串表示以及确保哈希码的一致性。此外,`Object` 还提供了 `clone`、`getClass`、`notify`、`notifyAll` 和 `wait` 等方法,支持对象克隆、反射机制及线程同步。理解和重写这些方法有助于提升 Java 代码的可读性和可维护性。
|
3月前
|
Java
【Java基础面试二十】、介绍一下Object类中的方法
这篇文章介绍了Java中Object类的常用方法,包括`getClass()`、`equals()`、`hashCode()`、`toString()`、`wait()`、`notify()`、`notifyAll()`和`clone()`,并提到了不推荐使用的`finalize()`方法。
【Java基础面试二十】、介绍一下Object类中的方法
|
2月前
|
Python
类与面向对象编程(Object-Oriented Programming, OOP)
类与面向对象编程(Object-Oriented Programming, OOP)