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

選擇Python還是JavaScript應基於職業發展、學習曲線和生態系統:1)職業發展:Python適合數據科學和後端開發,JavaScript適合前端和全棧開發。 2)學習曲線:Python語法簡潔,適合初學者;JavaScript語法靈活。 3)生態系統:Python有豐富的科學計算庫,JavaScript有強大的前端框架。

JavaScript框架的強大之處在於簡化開發、提升用戶體驗和應用性能。選擇框架時應考慮:1.項目規模和復雜度,2.團隊經驗,3.生態系統和社區支持。

引言我知道你可能會覺得奇怪,JavaScript、C 和瀏覽器之間到底有什麼關係?它們之間看似毫無關聯,但實際上,它們在現代網絡開發中扮演著非常重要的角色。今天我們就來深入探討一下這三者之間的緊密聯繫。通過這篇文章,你將了解到JavaScript如何在瀏覽器中運行,C 在瀏覽器引擎中的作用,以及它們如何共同推動網頁的渲染和交互。 JavaScript與瀏覽器的關係我們都知道,JavaScript是前端開發的核心語言,它直接在瀏覽器中運行,讓網頁變得生動有趣。你是否曾經想過,為什麼JavaScr

Node.js擅長於高效I/O,這在很大程度上要歸功於流。 流媒體匯總處理數據,避免內存過載 - 大型文件,網絡任務和實時應用程序的理想。將流與打字稿的類型安全結合起來創建POWE

Python和JavaScript在性能和效率方面的差異主要體現在:1)Python作為解釋型語言,運行速度較慢,但開發效率高,適合快速原型開發;2)JavaScript在瀏覽器中受限於單線程,但在Node.js中可利用多線程和異步I/O提升性能,兩者在實際項目中各有優勢。

JavaScript起源於1995年,由布蘭登·艾克創造,實現語言為C語言。 1.C語言為JavaScript提供了高性能和系統級編程能力。 2.JavaScript的內存管理和性能優化依賴於C語言。 3.C語言的跨平台特性幫助JavaScript在不同操作系統上高效運行。

JavaScript在瀏覽器和Node.js環境中運行,依賴JavaScript引擎解析和執行代碼。 1)解析階段生成抽象語法樹(AST);2)編譯階段將AST轉換為字節碼或機器碼;3)執行階段執行編譯後的代碼。

Python和JavaScript的未來趨勢包括:1.Python將鞏固在科學計算和AI領域的地位,2.JavaScript將推動Web技術發展,3.跨平台開發將成為熱門,4.性能優化將是重點。兩者都將繼續在各自領域擴展應用場景,並在性能上有更多突破。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

WebStorm Mac版
好用的JavaScript開發工具

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

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

Dreamweaver Mac版
視覺化網頁開發工具