Bob Cheng
Web

Object-Relational Mapping

Why

在後端常常會需要和資料庫連接,通常我們會直接撰寫 SQL 語法來查詢 database,不過這樣做有一些缺點:

  • 易讀性低、不好維護
  • SQL 語法不好重複利用
  • SQL injection 的風險
  • 不同資料庫的語法可能不太一樣

What

ORM 基本上就是在 database 和 OOP languages 之間多建立一層封裝,將資料庫的資料轉換成類似物件的概念方便我們操作,而 ORM 會將這些操作映射成 SQL 語法。

常見的 ORM framwork 有 Hibernate (Java), SQLAlchemy(Python), Entity Framework (.NET)

透過 ORM 可以改善上述直接使用 SQL 語法的缺點,不過 ORM 仍有一些缺點:

  • 效能降低
  • 需要額外學習 ORM 的用法

ORM vs DAO

ORM 通常是一套 API/library,針對特定類型的 database 和 OOP languages,概念是將資料庫欄位"轉換"成物件讓開發者操作。

Data Access Object (DAO) 則是一種 Object,用來封裝某些資料 (像是 database) 並提供一些 methods 來操作這些資料。開發者在實作 DAO 的時候很可能會用到 ORM。


References