8个用于高效编码的JavaScript ORM平台

构建完整的应用程序时,几乎可以肯定您将需要使用数据库。这样的应用程序将需要实现crud操作,即创建(create)、读取(read)、更新(update)和删除(delete)数据的能力。

为此,数据库是必要的。如果您使用类似javascript这样的面向对象的编程语言,并且使用关系型数据库例如mysql,那么与数据库的交互可能会变得具有挑战性。

作为javascript开发人员,您还需要关注关系数据库的复杂细节,并弄清楚数据库语法以及如何编写应用程序可能需要的复杂sql查询。

请记住,关系数据库将数据存储在带有行和列的表中,而javascript使用对象和对象之间的关系进行工作。所有这些都可能变得非常耗时和具有挑战性,因此需要一个对象关系映射器(orm)。

对象关系映射器(orm)

orm是一种工具,允许开发人员使用面向对象的原则与关系数据库一起工作。

orm充当应用程序代码和所选择的关系数据库之间的桥梁,允许开发人员使用与他们在应用程序代码中使用的面向对象原则相同的原则与关系数据库一起工作。

orm将关系数据库表映射到类,类实例代表表中的记录或行。类属性用于表示表中的列。

这意味着开发人员可以使用他们选择的编程语言来创建、读取、更新、删除和管理存储在数据库中的数据,无需编写复杂的sql语句。

通过使用orm,您可以最小化需要阅读的sql数量,同时避免为了与数据库一起工作而学习新的查询语言。

要了解orm的工作原理,考虑以下mysql查询以查找it部门的用户:

select * from users where department = 'it';

可以使用javascript的orm进行相同的查询,请注意使用纯javascript进行相同查询的示例:

const users = await user.findall({
  where: {
    department: 'it',
  },
});

使用orm的好处

使用orm可以为javascript开发人员带来以下好处:

抽象数据库复杂性

orm隐藏了底层数据库的复杂性,允许开发人员通过后端语言而不是复杂的sql与数据库进行交互。

一些orm还提供查询构建器,通过使用面向对象编程原则,编写复杂查询变得轻而易举。这使开发人员能够编写更清晰、更易于维护的代码,更容易进行调试和更新。

提高生产力

orm将编写原始sql查询和管理数据库交互的复杂性抽象出来,使开发人员仅需专注于应用程序的业务逻辑,这是应用程序中最重要的部分。

此外,开发人员还可以以更熟悉的面向对象编程(oop)模式与数据库进行交互,而无需编写大量样板代码或执行重复任务。

orm还可以用于自动填充数据库和生成数据访问代码。所有这些因素都极大地提高了开发人员的生产力。

数据库不可知性

orm的一个关键特点是它们允许您以数据库不可知的方式编写应用程序代码。这样,您的应用程序代码不会与单个数据库绑定在一起,因此您可以轻松切换应用程序使用的数据库,而无需更改应用程序代码的大部分。

这一点非常重要,尤其是当应用程序需要演进或支持使用多个数据库时。

简化的模式和关系管理

orm简化了在数据库中使用模式和管理数据库实体之间关系的过程。

一些orm提供了从现有数据库自动生成模式的功能,大多数orm提供了一些方法,可以轻松定义和管理存储在数据库中的表之间的关系。

增强的安全性

orm提供了增强的数据库安全性,因为它们为您过滤数据,并在内部使用参数化查询。参数化查询是使用占位符而不是直接使用用户提供的输入值的sql查询。

因此,用户提供的输入永远不会直接嵌入到sql查询中。这使得orm可以保护您的应用程序免受sql注入攻击,从而增强您的应用程序的安全性。

使用orm的缺点

尽管orm对于开发人员有很多好处,但也有一些与其使用相关的缺点。首先,由于它们在数据库之上引入了抽象层,可能会导致性能开销和更多内存的使用。

此外,要使用orm,开发人员需要学习如何使用它,而且如果不了解sql的基本知识,他们无法使用orm来知道每个命令实际上是做什么。

话虽如此,orm仍然是开发人员的一个非常有益的工具,也是使用面向对象编程原则构建的应用程序与关系数据库进行交互的最佳和最简单的方法。为了帮助您开始使用orm,以下是一些您可以在javascript应用程序中使用的最佳orm。

sequelize

根据其官方文档,sequelize是一个现代的typescript和node.js orm,适用于oracle db、postgresql、mysql、mariadb、sqlite、microsoft sql server、ibm db2和snowflake数据库。sequelize是一个非常受欢迎的orm,适用于与node.js框架一起使用关系数据库的开发人员。

这可以归功于其强大的功能集,使得在node.js中使用关系数据库变得非常简单。首先,sequelize是一个基于promise的orm,这个特性使其支持promise,而promise是node.js框架的核心特性。

此外,sequelize支持急加载,即在应用程序代码执行时即加载资源,以及延迟加载,即直到需要时才加载资源。sequelize还具有可靠的事务支持、读取复制、模型验证功能,并且允许数据库迁移和同步。

使用sequelize时,用户还可以定义模型之间的关联和关系。总之,它提供了丰富的查询选项,使开发人员能够轻松构建复杂的数据库查询。

prisma

prisma是一个开源orm,允许您轻松管理和与任何javascript或typescript环境中的数据库进行交互。

prisma支持postgresql、mysql、microsoft sql server、cockroachdb、sqlite和mongodb。此外,它还可以与任何javascript或typescript框架轻松集成,简化数据库操作,并增加类型安全性。

为了帮助开发人员构建查询,prisma提供了一个名为prisma客户端的功能,它具有自动完成,并允许开发人员构建与应用程序中使用的模式相适应的类型安全查询。

开发人员可以从头开始创建自己的模式,也可以使用prisma通过内省现有数据库自动生成模式。

prisma的另一个功能是prisma迁移,它是一个自动生成可自定义sql迁移的prisma模式迁移工具,允许用户在将应用程序从开发环境迁移到生产环境时具有完全的控制和灵活性。

最后,prisma用户可以使用prisma studio,这是一个管理员用户界面,允许用户查看、探索、操作和了解其数据库中存储的数据。所有这些功能使prisma成为javascript和typescript开发人员的优秀orm。

typeorm

typeorm是一个开源的orm,旨在始终支持最新的javascript特性,并提供其他功能,以允许开发人员创建使用数据库的任何类型的应用程序。

typeorm支持mysql、mariadb、postgresql、cockroachdb、sqlite、microsoft sql server、oracle、sap hana和sql.js数据库。

typeorm支持javascript和typescript编程语言,还支持非关系数据库mongodb。typeorm适用于node.js、浏览器、ionic、cordova、react native、nativescript、expo和election平台。

typeorm允许开发人员使用多个数据库类型和多个数据库实例。它还支持查询缓存、日志记录、事务、关联、急加载和延迟关系,并允许迁移和自动生成迁移。

typeorm还支持datamapper、activerecord、流式原始结果、跨数据库和跨模式查询,并为用户提供了强大的查询构建器。

mikroorm

mikroorm是一个开源的typescript orm,支持mysql、mariadb、postgresql、sqlite和mongodb。该orm基于datamapper、identity map模式和工作单元模式。工作单元用于维护由业务交易影响的实体列表,并协调写入更改。

这样做的好处是可以自动处理事务,自动批处理所有查询,并直接在使用的实体中实现业务/领域逻辑。

mikroorm还配备了一个具有自动联接支持的元数据感知querybuilder和一个事件系统,可用于钩入实体生命周期并改变unitofwork的工作方式。

使用mikroorm也更容易进行种子数据库,即使用种子处理程序填充数据库的初始数据,因为它配备了一个种子处理程序,可以用于生成任何数量或形状的虚假数据,并用它来填充数据库。

最后,mikroorm还支持轻松的上下数据库迁移。

bookshelf.js

bookshelf是一个用于node.js的开源javascript orm。这个orm旨在提供一个简单的库,可用于在javascript中查询数据库和形成对象之间的关系时执行常见任务。bookshelf设计用于与postgresql、mysql和sqlite3一起使用。

作为一个node.js orm,bookshelf支持在node.js应用程序中使用promises和传统的回调来使用orm。此外,它还支持事务、多态关联、渴望/嵌套渴望关系加载和各种关系。

尽管它不像其他功能更丰富的orm那样强大,但bookshelf通过其简单性、灵活性以及阅读和理解其代码库以及扩展它的简易程度而闪耀。如果您需要一个简单、精简的orm用于javascript项目,bookshelf是一个很好的选择。

node orm2

node orm2是一个简单而轻量级的node.js orm,支持mysql、sqlite和progress openedge数据库。这个orm允许您在node.js中轻松地使用模型。在使用模型时,它允许您轻松地创建、同步、删除、获取、查找、移除、计数和批量创建数据模型。

它还允许在模型之间创建关联,并定义自定义验证,以及与其一起提供的内置验证。node orm2实现了实例单例行为,确保当您多次获取相同的行时,您始终获得表示该行的相同对象。

waterline

waterline是一个基于适配器的node.js orm。它也是sails web开发框架默认的orm。然而,可以在不使用sails框架的情况下使用waterline。

作为一个基于适配器的orm,waterline通过使用适配器来支持与多个数据库系统的工作。官方支持的数据库包括mysql、postgresql、mongodb、redis和本地存储。

然而,waterline还有用于couchdb、sqlite、oracle、microsoft sql server、db2、riak、neo4j、orientdb、amazon rds、dynamodb、azure tables、rethinkdb和solr的社区适配器。

waterline允许您在项目中使用多个数据库,并为使用不同数据库和协议进行工作提供统一的api。这意味着使用waterline orm编写的代码可以在orm支持的任何数据库上运行,而无需更改代码。

此外,waterline注重模块化、可测试性和适配器之间的一致性,使其非常易于使用和与各种数据库集成。

objection.js

objection.js 是一个orm,旨在不干涉你的方式,使得轻松使用sql和底层数据库引擎的全部功能成为可能。

在这方面,它提供了所有sql查询构建器的优势,并且具备处理关系的强大能力。sql查询构建器是简化创建复杂sql查询过程的工具。

objection.js提供了一种简单的定义模型和它们之间关系的方式,具备完整的创建、读取、更新、删除(crud)功能,全面利用sql的全部功能,并提供易于使用的事务处理。

用户还可以使用eager load,插入和upsert对象图,将复杂文档作为单行存储,并使用json模式验证。objection.js官方支持typescript和javascript编程语言。

结论

作为开发者,当在javascript或typescript应用程序中与关系数据库交互时,最好通过orm与数据库交互。

这不仅可以简化数据库交互,还可以提高工作效率,减少需要编写的sql代码,并增强应用程序的安全性。

在选择使用哪个orm时,请考虑根据应用程序的特性选择本文中介绍的任何一个orm。

你也可以探索最好的javascript在线编译器

类似文章