iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 9
0

ORM (Object-Relational Mapping) 像是提供了一個翻譯平台,使開發者能使用如同操作物件的方式來存取關聯式資料庫。這樣一來,就不用額外再去熟悉標準 SQL 和各家SQL的特殊語法。當底層的資料庫版本有更新、轉移到別家資料庫時,因為開發者並非直接對資料庫本身進行操作,也降低了依賴程度(耦合性, coupling)。

常見的 ORM 框架

目前並無發現有知名機構來統一調查開發者中最熱門的 ORM 的數據。以下就簡單列出幾個:

  • JAVA - Hibernate
  • .NET - NHibernate、Dapper
  • MongoDB - Mongoose(Node.js)
  • SQL - Sequelize(Node.js)

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 的優缺點。


上一篇
Day 8 SQL Injection
下一篇
Day 10 ORM vs. SQL
系列文
SQL 30天手把手入門30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言