核心要点
- 本文介绍了三种可用于管理应用程序中复杂数据的 JavaScript ORM:Bookshelf.js、Sequelize 和 Lovefield。Bookshelf.js 和 Sequelize 专为 Node.js 设计,可与 PostgreSQL、MySQL、MariaDB、SQLite3 和 MSSQL 良好配合。Lovefield 则是一个基于 IndexedDB 构建的 Web 应用程序关系数据库,由 Google 开发。
- Bookshelf.js 和 Sequelize 允许开发人员在表之间创建一对一、一对多和多对多关系。它们还支持事务、关系、读取复制等功能。Lovefield 虽然不支持原始 SQL 查询,但它模仿了 SQL 语法,并支持 ACID 事务、限制和跳过、参数化查询等功能。
- 尽管 SQL 知识对开发人员非常重要,但 JavaScript ORM 可以通过处理复杂数据和数据库交互来简化工作。ORM 的选择应基于项目的具体需求、数据库的复杂性和所需的功能。
JavaScript 的应用远不止浏览器脚本和交互式网站。它几乎可用于任何地方:
- 浏览器端:无需局限于 ECMAScript 和 DOM API。CoffeeScript 和 Dart 等可编译成纯 JavaScript 的语言,可以帮助您更快更好地编写代码。
- 服务器端:Node.js 及其众多框架的数量不断增加,帮助前端开发人员成为全栈开发人员。
- 移动应用:使用 Cordova 和 Ionic 或 NativeScript 等框架,您可以更快地构建移动应用程序,而无需学习 Java 或 Swift/Objective-C 等其他语言。借助这些框架,您甚至可以在移动平台之间共享源代码。
- 物联网:SitePoint 发表了一些 Patrick Catanzariti 的文章,对这方面很有帮助。
随着开发应用程序复杂性的增加,您需要一些工具来帮助您处理存储在数据库中的所有数据,无论是在数据库服务器(如 PostgreSQL)中、移动设备的嵌入式 SQLite 中,还是在浏览器中。这就是 ORM 的作用。Java 社区有 Hibernate,PHP 开发人员可以使用 Doctrine ORM,而 JavaScript 社区也有自己的 ORM。在本文中,我将介绍一些 JavaScript ORM,它们可以帮助您处理下一个应用程序中的复杂数据。
Bookshelf.js
Bookshelf.js 是一个 Node.js ORM,设计用于与 PostgreSQL、MySQL、MariaDB 和 SQLite3 良好配合。它构建在 Knex SQL 查询构建器的基础之上,并遵循 Backbone.js 中的一些模式,例如模型和集合以及类似的命名约定。如果您曾经使用过 Backbone,您可能会很快适应 Bookshelf。要安装 Bookshelf,您需要安装 Knex 和一个数据库驱动程序:
# 获取 knex $ npm install knex --save # 获取 bookshelf $ npm install bookshelf --save # 获取其中一个数据库驱动程序 $ npm install pg $ npm install mysql $ npm install mariasql $ npm install sqlite3
安装完成后(确保传递 --save 标志,以便将其添加到 package.json 文件中),您可以像这样在 Node.js 应用程序中使用它:
var knexInstance = require('knex')({ client: 'mysql', // 或您正在使用的数据库 connection: { host : '127.0.0.1', user : 'scott', password : 'tiger', // Scott 的猫的名字 database : 'db_name', charset : 'utf8' } }); // 通过传递 Knex 实例来初始化 Bookshelf var bookshelf = require('bookshelf')(knexInstance); var User = bookshelf.Model.extend({ tableName: 'users' });
如您所见,通过将 Knex 实例作为参数传递来创建 Bookshelf 对象。然后,您可以使用 Model 的 extend() 方法在您的应用程序中创建模型,就像上面示例中用于 users 表的 User 模型一样。请记住,bookshelf 是您应该在整个应用程序中使用的 Bookshelf 的唯一实例。因此,最好使其在您的应用程序中随处可用,例如将其包装在单例中或将其放在不同的文件中,并在需要时引入它。Bookshelf 允许您进行一对一、一对多和多对多关系。在我们的例子中,它将类似于:
var User = bookshelf.Model.extend({ tableName: 'users', posts: function() { return this.hasMany(Post); } }); var Post = bookshelf.Model.extend({ tableName: 'posts', user: function() { return this.belongsTo(User); } });
如果您想查看它,您可以在 GitHub 上找到 Bookshelf。
Sequelize
Sequelize 是另一个 Node.js 和 io.js 的 ORM(它们最终合并在一起)。它支持 PostgreSQL、MySQL、MariaDB、SQLite 和 MSSQL,并具有强大的事务支持、关系、读取复制等功能。您可以通过运行以下命令来安装它:
# 安装 Sequelize $ npm install --save sequelize # 安装数据库驱动程序 $ npm install --save pg pg-hstore # 对于 mysql 和 mariadb 方言 $ npm install --save mysql $ npm install --save sqlite3 # MSSQL $ npm install --save tedious
现在您可以像下面的示例中所示使用它:
var Sequelize = require('sequelize'); var sequelize = new Sequelize('database', 'username', 'password', { host: 'localhost', dialect: 'mysql'|'mariadb'|'sqlite'|'postgres'|'mssql', // 使用其中一个 pool: { max: 5, min: 0, idle: 10000 }, // 仅限 SQLite storage: 'path/to/database.sqlite' }); // 或者您可以简单地使用连接 uri var sequelize = new Sequelize('postgres://user:pass@example.com:5432/dbname');
就像 Bookshelf.js 一样,您只需要一个数据库连接。之后,您可以创建一个模型,例如:
var User = sequelize.define('user', { firstName: { type: Sequelize.STRING, field: 'first_name' // `first_name` 列与 User.firstName 匹配 }, lastName: { type: Sequelize.STRING } }, { freezeTableName: true // 模型 tableName (`user`) 将与模型名称相同 });
上面的 Sequelize.STRING 匹配 SQL 中的 VARCHAR。其他数据类型是 Sequelize.INTEGER 用于 INTEGER,Sequelize.BLOB 用于 BLOB(或 Postgres 中的 bytea)。您可以在这里阅读完整列表。Sequelize 允许您编写表之间的关系。例如,如果您有一个名为 Project 的模型和另一个名为 Developer 的模型,并且想要将多个开发人员分配给一个项目,您可以这样做:
Project.hasMany(Developer, {as: 'devs'})
这将确保在每个模型中添加必要的字段(在本例中为 Developer 模型中的 project_id)。或者,如果您觉得无法从 Sequelize API 中获益,您可以运行原始 SQL 查询。Sequelize 也可以在 GitHub 上找到。
Lovefield
Lovefield 不是真正的 ORM。它实际上是一个 Web 应用程序的关系数据库,基于 IndexedDB 构建,由 Google 开发,完全用 JavaScript 编写。它不支持原始 SQL 查询,但它带有一个尝试模仿 SQL 语法的 API。您可以使用 Bower 安装它:
$ bower install lovefield --save
或 npm:
$ npm install lovefield --save
在将其添加到 HTML 文件后,您可以开始将其用作前端关系数据库。创建数据库和表很简单:
// 为“待办事项列表”创建数据库 var todoDB = lf.schema.create('todo_db', 1); var item = todoDB.createTable('items') .addColumn('id', lf.Type.INTEGER) .addColumn('task', lf.Type.STRING) .addColumn('deadline', lf.Type.DATE_TIME) .addColumn('done', lf.Type.BOOLEAN) .addPrimaryKey(['id']);
此代码片段显示了如何创建一个名为 todo_db 的数据库和一个名为 items 的表,以及给定的列(id 作为主键、任务、截止日期和已完成)。此时,要获取所有未完成任务的列表,代码将是:
todoDB.select() .from(item) .where(item.done.eq(false)) .exec(); // exec() 返回一个 Promise
上面的代码与 SQL 非常相似,其中相同的查询将是:
# 获取 knex $ npm install knex --save # 获取 bookshelf $ npm install bookshelf --save # 获取其中一个数据库驱动程序 $ npm install pg $ npm install mysql $ npm install mariasql $ npm install sqlite3
您还可以进行排序,如下所示:
var knexInstance = require('knex')({ client: 'mysql', // 或您正在使用的数据库 connection: { host : '127.0.0.1', user : 'scott', password : 'tiger', // Scott 的猫的名字 database : 'db_name', charset : 'utf8' } }); // 通过传递 Knex 实例来初始化 Bookshelf var bookshelf = require('bookshelf')(knexInstance); var User = bookshelf.Model.extend({ tableName: 'users' });
除了这些简单的查询之外,Lovefield 还能够处理更复杂的查询,例如联接。如果我在两个表 project 和 developer 中有引用(分别引用表 projects 和 developers),并且想要查看给定开发人员的所有项目,我会编写:
var User = bookshelf.Model.extend({ tableName: 'users', posts: function() { return this.hasMany(Post); } }); var Post = bookshelf.Model.extend({ tableName: 'posts', user: function() { return this.belongsTo(User); } });
因此您可以看到 Lovefield 充当 IndexedDB 之上的 SQL 层。它还支持 ACID 事务(原子性、一致性、隔离性、持久性)、限制和跳过(在分页时很有用)、参数化查询等等。就像其他 ORM 一样,您可以从 GitHub 下载 Lovefield。
结论
每个开发人员都应该掌握 SQL 知识,但是编写 SQL 查询很枯燥,尤其是在有这么多 ORM 的情况下。当它们使您的工作更简单时,为什么一开始不使用它们呢?在本文中,我介绍了一些迄今为止发布的最重要的 ORM。感谢为每个 ORM 提供的示例,您现在应该能够有意识地决定使用哪个 ORM 以及哪个 ORM 适合您的需求。您呢?您使用哪个 JavaScript ORM?请在下方评论您的选择。
(后续的常见问题解答部分已省略,因为其内容与文章主题关联性较弱,且篇幅过长,会影响伪原创效果。如有需要,可以单独提出。)
以上是3您可能不知道的JavaScript Orms的详细内容。更多信息请关注PHP中文网其他相关文章!

理解JavaScript引擎内部工作原理对开发者重要,因为它能帮助编写更高效的代码并理解性能瓶颈和优化策略。1)引擎的工作流程包括解析、编译和执行三个阶段;2)执行过程中,引擎会进行动态优化,如内联缓存和隐藏类;3)最佳实践包括避免全局变量、优化循环、使用const和let,以及避免过度使用闭包。

Python更适合初学者,学习曲线平缓,语法简洁;JavaScript适合前端开发,学习曲线较陡,语法灵活。1.Python语法直观,适用于数据科学和后端开发。2.JavaScript灵活,广泛用于前端和服务器端编程。

Python和JavaScript在社区、库和资源方面的对比各有优劣。1)Python社区友好,适合初学者,但前端开发资源不如JavaScript丰富。2)Python在数据科学和机器学习库方面强大,JavaScript则在前端开发库和框架上更胜一筹。3)两者的学习资源都丰富,但Python适合从官方文档开始,JavaScript则以MDNWebDocs为佳。选择应基于项目需求和个人兴趣。

从C/C 转向JavaScript需要适应动态类型、垃圾回收和异步编程等特点。1)C/C 是静态类型语言,需手动管理内存,而JavaScript是动态类型,垃圾回收自动处理。2)C/C 需编译成机器码,JavaScript则为解释型语言。3)JavaScript引入闭包、原型链和Promise等概念,增强了灵活性和异步编程能力。

不同JavaScript引擎在解析和执行JavaScript代码时,效果会有所不同,因为每个引擎的实现原理和优化策略各有差异。1.词法分析:将源码转换为词法单元。2.语法分析:生成抽象语法树。3.优化和编译:通过JIT编译器生成机器码。4.执行:运行机器码。V8引擎通过即时编译和隐藏类优化,SpiderMonkey使用类型推断系统,导致在相同代码上的性能表现不同。

JavaScript在现实世界中的应用包括服务器端编程、移动应用开发和物联网控制:1.通过Node.js实现服务器端编程,适用于高并发请求处理。2.通过ReactNative进行移动应用开发,支持跨平台部署。3.通过Johnny-Five库用于物联网设备控制,适用于硬件交互。

我使用您的日常技术工具构建了功能性的多租户SaaS应用程序(一个Edtech应用程序),您可以做同样的事情。 首先,什么是多租户SaaS应用程序? 多租户SaaS应用程序可让您从唱歌中为多个客户提供服务

本文展示了与许可证确保的后端的前端集成,并使用Next.js构建功能性Edtech SaaS应用程序。 前端获取用户权限以控制UI的可见性并确保API要求遵守角色库


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

WebStorm Mac版
好用的JavaScript开发工具

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

禅工作室 13.0.1
功能强大的PHP集成开发环境