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

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

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

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

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務
