什么是 ORM ?
ORM 全称为 Object Relational Mapping,即对象关系映射。ORM 是实现数据持久化的技术之一,通过将数据模型转化为对象模型,将关系型数据库中的数据映射到面向对象编程语言中的对象。ORM 可以减少数据库 SQL 编写量、简化数据库操作。
在 Web 开发中,ORM 框架可以为后端提供一个简便的持久层,消除了复杂的 SQL 编写,使得开发人员专注于业务逻辑的实现,提高工作效率。本文将介绍 Hapi.js 中支持的 ORM 框架。
介绍 Hapi.js
Hapi.js 是一个由 Walmart 开发的 Web 框架,它提供了一个强大且可扩展的工具集,使得构建应用程序变得更加简单。和其他 Web 框架相比,Hapi.js 具备以下几个优点:
- 路由器
- 支持插件
- 支持多种 REST API 风格
- 集成测试的构建
- 天生安全(默认开启 CORS,CSRF 保护)
因此,在 Web 技术快速迭代的今天,Hapi.js 开箱即用的特性为我们提供了快捷高效的开发方式。现在让我们来介绍在 Hapi.js 中支持的 ORM 框架。
介绍 Objection.js
Objection.js 是一个基于 Knex.js 的 ORM 框架,用于 Node.js 和浏览器端。它提供了多种功能,如基本 CRUD 操作、查询构建器、模型继承和分页查询。此外,Objection.js还提供了良好的 TypeScript 支持。我们来看一个简单的例子。
// javascriptcn.com 代码示例 const { Model } = require('objection'); const Knex = require('knex'); const knex = Knex({ client: 'postgresql', connection: { database: 'my_db', user: 'username', password: 'password' } }); Model.knex(knex); class Person extends Model { static get tableName() { return 'persons'; } static get relationMappings() { return { pets: { relation: Model.HasManyRelation, modelClass: Animal, join: { from: 'persons.id', to: 'animals.ownerId' } } }; } } module.exports = Person;
上述示例代码展示了如何在 Objection.js 中定义一个 Model,它与 database 中的 persons 表进行了映射。其中,relationMappings 描述了它与另一个 Model 的关系,并且将它们映射为表之间的 Relation。
介绍 Sequelize
Sequelize.js 是一个基于 Promise 的 Node.js ORM 框架,用于支持 PostgreSQL、MySQL、SQLite 和 Microsoft SQL Server 等关系型数据库。它支持多种查询方式(如原始查询、预处理查询、ORM 查询和 ORM 结合 SQL 的查询),提供多种模型定义方式(如 ES6 类模型、函数模型、模型注解模型和表模型等),并提供数据类型映射、事务控制、数据时间戳等功能。下面是一个简单的示例代码。
// javascriptcn.com 代码示例 const { Sequelize, Model, DataTypes } = require('sequelize'); const sequelize = new Sequelize({ dialect: 'sqlite', storage: 'users.sqlite' }); class User extends Model {} User.init({ firstName: { type: DataTypes.STRING, allowNull: false }, lastName: { type: DataTypes.STRING, allowNull: false } }, { sequelize, modelName: 'user' }); (async () => { await sequelize.sync(); const jane = await User.create({ firstName: 'Jane', lastName: 'Doe' }); console.log(jane.toJSON()); })();
上述代码描述了 Sequelize.js 中定义一个基础 Model 的过程。在这里,我们使用 User.init() 方法定义一个名为 User 的模型,并将其映射到用户表。我们还可以通过 associate() 方法定义一个 Model 在其与另一个 Model 之间的关系。
总结
通过本文介绍,我们了解了在 Hapi.js 中支持的 ORM 框架,并对它们的基本使用方法有了充分的了解。使用 ORM 框架可以使我们在构建 Web 应用程序时免去许多重复的 SQL 编写工作,使我们更专注于业务逻辑的实现。在开发过程中,要根据需求和后端语言技术选取合适的 ORM 框架,从而为团队开发进度和性能提供更好的支持。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6538d3867d4982a6eb1f001d