ORM (Object-Relational Mapping) 像是提供了一個翻譯平台,使開發者能使用如同操作物件的方式來存取關聯式資料庫。這樣一來,就不用額外再去熟悉標準 SQL 和各家SQL的特殊語法。當底層的資料庫版本有更新、轉移到別家資料庫時,因為開發者並非直接對資料庫本身進行操作,也降低了依賴程度(耦合性, coupling)。
目前並無發現有知名機構來統一調查開發者中最熱門的 ORM 的數據。以下就簡單列出幾個:
若有一個公開的聊天室,想要取得大家的聊天記錄,那麼用 ORM 寫起來會像是這樣:
/*有一個 Message 的資料表,其裡面已經和 User 資料表建立好關聯*/
Message.findAll({
limit: 20,
order: [['createdAt', 'DESC']],
include: [User]
}).then(messages => {
return res.json({ messages: messages })
})
ORM 會幫你產出如下的 SQL 指令去存取資料庫的資料:
SELECT `Message`.`id`, `Message`.`content`, `Message`.`UserId`, `Message`.`createdAt`, `Message`.`updatedAt`, `User`.`id` AS `User.id`, `User`.`name` AS `User.name`, `User`.`email` AS `User.email`, `User`.`password` AS `User.password`, `User`.`isAdmin` AS `User.isAdmin`, `User`.`createdAt` AS `User.createdAt`, `User`.`updatedAt` AS `User.updatedAt` FROM `Messages` AS `Message` LEFT OUTER JOIN `Users` AS `User` ON `Message`.`UserId` = `User`.`id` ORDER BY `Message`.`createdAt` DESC LIMIT 20;
如此一來,對於開發者而言,可以說是節省了不少時間呢。下一篇會講到 ORM 和撰寫原始 SQL Statement 的優缺點。