首頁 > web前端 > js教程 > 3您可能不知道的JavaScript Orms

3您可能不知道的JavaScript Orms

Lisa Kudrow
發布: 2025-02-19 08:56:17
原創
763 人瀏覽過

3 JavaScript ORMs You Might Not Know

核心要點

  • 本文介紹了三種可用於管理應用程序中復雜數據的 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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板