如果没有接触过 Node.js 或其他后端开发语言开发的与数据库交互的应用程序,可能对这个 ORM 框架有点迷糊,那么它究竟是个什么玩意儿?今儿主要介绍下 Node.js 中常用的几个 ORM 框架
什么是ORM?
ORM: 全名是 Object Relational Mapping(对象关系映射)是一种程序设计技术。简单说就是在操作数据库之前,先把数据表与实体类关联起来。然后通过实体类的对象操作(增删改查)数据库表。好处就是无需在代码中编写原生的SQL语句,直接通过操作实体对象的方式对数据库表进行CRUD,减少开发者对原生SQL的一个学习成本,对开发者来说更好的理解与上手,但是在可控性和性能上就没有直接操作原生SQL那么6了
像JAVA中主流的ORM框架有:Hibernate、Mybatis
ORM操作流程?
1、建立数据库连接
2、对实体对象CRUD操作
3、关闭数据库连接
Node.js都有哪些ORM框架?
Sequelize
Sequelize 是一个基于 promise 的 Node.js 的 ORM,目前支持 Mysql,Postgres,MariaDB,SQLite以及 Microsft SQL Server。它具有强大的事务支持,关联关系,预读和延迟加载,读取复制等功能。低版本不支持Ts
Sequelize 遵从语义版本控制。支持 Node v10 及更高版本以便使用 ES6 功能
是Egg框架默认的数据库 ORM
官网:https://www.sequelize.com.cn
Github:https://github.com/sequelize/sequelize
TypeORM
TypeORM 是一个运行在 NodeJS、Browser、Cordova、PhoneGap、Ionic、React Native、Expo 和 Electron 平台上的一个 ORM 框架,可以与 TypeScript 和 JavaScript 一起使用。它的目标是始终支持最新的 JavaScript 特性并提供额外的特性以帮助你开发任何使用数据库的应用程序
TypeORM 支持 Active Record (活动记录)和 Data Mapper(数据映射) 模式,这意味着你可以以最高效的方式编写高质量的、松耦合的、可扩展的、可维护的应用程序
TypeORM 参考了很多其他优秀 ORM 的实现, 如 Hibernate, Doctrine 和 Entity Framework
目前支持 MySQL、MariaDB、PostgreSQL、SQLite、Microsoft SQL Server、sql.js、Oracle、MongoDB (试验性)、NativeScript, react-native 和 Cordova
复杂的 SQL 实现比较麻烦,TypeORM 提供了底层的 query builder 让你自己去构建更复杂的 SQL
Typeorm 对 Serverless 场景的支持有待优化,在数据库重连接方面有些问题待解决
对 TS 的高度支持、简洁、支持装饰器语法。是Midway框架默认的数据库ORM,同时也完美集成到了Nestjs框架
官网:https://typeorm.bootcss.com
Github:https://github.com/typeorm/typeorm
Prisma
Prisma 是一个开源的下一代 Node.js、TypeScript、Go 的数据库 ORM,目前支持 PostgreSQL、MySQL、MongoDB(实验性)、SQL Server(实验性) 和 SQLite 数据库。Prisma 客户端可以被用在 Node.js 或 TypeScript 后端应用中(包括 Serverless 应用和微服务)。可以是一个 REST API,一个 GraphQL API,一个 gRPC API,或任何其他需要数据库的东西
Prisma 通过提供一个干净(clean)和类型安全(type-safe)的 API 来提交数据库查询,同时返回一个普通 JavaScript 对象(plain old JavaScript object),来使得开发者能够更容易地进行数据库查询
提供VS Code编辑器扩展插件、语法高亮、智能自动补全
Prisma 是 TypeScript 生态中唯一一个 彻底 的类型安全 ORM
Prisma 的主要目的是使应用程序开发人员在与数据库打交道时能够更加高效
Prisma 提倡开发人员应该只关心他们实现某项功能所需要的数据,而不是花时间去搞清楚复杂的 SQL 查询,在面对复杂的 SQL 查询时还支持暴露原生 SQL API
官网文档详细较全,目前在业界的呼声也很高
官网:https://prisma.yoga
Github:https://github.com/prisma/prisma
Mongoose
是一款比较流行的 MongoDB 数据库 Node ORM,它是对Node原生的MongoDB模块进行了进一步的优化封装
官网:http://www.mongoosejs.net
Github:https://github.com/Automattic/mongoose
Knex
Knex 是为 PostgreSQL,CockroachDB,MSSQL,MySQL,MariaDB,SQLite3,Better-SQLite3,Oracle和Amazon Redshift设计的SQL查询构建器,其设计灵活,目前只有英文官网
官网:http://knexjs.org
Github:https://github.com/knex/knex
Objection
是一款 Node.js 的 SQL 友好型 ORM,开发者可以尽可能轻松地使用 SQL 和底层数据库引擎的全部功能。除了官网目前查到的资料有限
官网:https://vincit.github.io/objection.js
Github:https://github.com/vincit/objection.js
总结
原生SQL、ORM 以及 其他数据库工具 存在的问题
传统的ORM框架虽然生产力高但是可控性低
原生SQL语句虽然完全可控但是生产力低
其他SQL查询生成器高可控,中等生产力
Prisma 的主要目标是使应用开发人员在使用数据库时更具有生产力。再考虑生产力和可控性之间的平衡
关于Prisma和其他常用ORM的对比可以看下下面这三篇文章:
Prisma和Typeorm的对比:
https://prisma.yoga/concepts/more/comparisons/prisma-and-typeorm
Prisma和Sequelize的对比:
https://prisma.yoga/concepts/more/comparisons/prisma-and-sequelize
Prisma和Mongoose的对比:
https://prisma.yoga/concepts/more/comparisons/prisma-and-mongoose
经过以上对比,直呼Prisma牛逼,个人觉得 Prisma 应该是目前最值得尝试的一个Node.js ORM 框架
参考资料
2022年顶级 Node.js ORM、查询生成器和数据库操作库详解:https://www.prisma.io/dataguide/database-tools/top-nodejs-orms-query-builders-and-database-libraries
2022年Node.js ORM框架选哪一个:https://www.zhihu.com/question/491654284/answer/2164593430
喜欢的话别忘了 分享、点赞、收藏 三连~
欢迎关注公众号 前端进阶体验 收获更多优质文章~