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。