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

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
JavaScript的演變:當前的趨勢和未來前景JavaScript的演變:當前的趨勢和未來前景Apr 10, 2025 am 09:33 AM

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

神秘的JavaScript:它的作用以及為什麼重要神秘的JavaScript:它的作用以及為什麼重要Apr 09, 2025 am 12:07 AM

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python還是JavaScript更好?Python還是JavaScript更好?Apr 06, 2025 am 12:14 AM

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。1.Python以简洁语法和丰富库生态著称,适用于数据分析和Web开发。2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。

如何安裝JavaScript?如何安裝JavaScript?Apr 05, 2025 am 12:16 AM

JavaScript不需要安裝,因為它已內置於現代瀏覽器中。你只需文本編輯器和瀏覽器即可開始使用。 1)在瀏覽器環境中,通過標籤嵌入HTML文件中運行。 2)在Node.js環境中,下載並安裝Node.js後,通過命令行運行JavaScript文件。

在Quartz中如何在任務開始前發送通知?在Quartz中如何在任務開始前發送通知?Apr 04, 2025 pm 09:24 PM

如何在Quartz中提前發送任務通知在使用Quartz定時器進行任務調度時,任務的執行時間是由cron表達式設定的。現�...

在JavaScript中,如何在構造函數中獲取原型鏈上函數的參數?在JavaScript中,如何在構造函數中獲取原型鏈上函數的參數?Apr 04, 2025 pm 09:21 PM

在JavaScript中如何獲取原型鏈上函數的參數在JavaScript編程中,理解和操作原型鏈上的函數參數是常見且重要的任�...

微信小程序webview中Vue.js動態style位移失效是什麼原因?微信小程序webview中Vue.js動態style位移失效是什麼原因?Apr 04, 2025 pm 09:18 PM

在微信小程序web-view中使用Vue.js動態style位移失效的原因分析在使用Vue.js...

在Tampermonkey中如何實現對多個鏈接的並發GET請求並依次判斷返回結果?在Tampermonkey中如何實現對多個鏈接的並發GET請求並依次判斷返回結果?Apr 04, 2025 pm 09:15 PM

在Tampermonkey中如何對多個鏈接進行並發GET請求並依次判斷返回結果?在Tampermonkey腳本中,我們經常需要對多個鏈...

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用