經過前幾天學到如何在 Express 上下 SQL 語法與資料庫交換資料,
但是下 SQL 與資料庫拿資料是我們後端工程師必備的日常,
每次都要下一大串重覆的 SQL 才能拿到資料,
或是一個占位符後面的參數順序不對,寫入的資料就整個順序錯了,
對於這些部分對開發來說是比較花時間的。
所以,在現今的開發流程,一般公司都會比較傾向使用 ORM 來與資料庫連接,
提高代碼的可讀性、可維護性和安全性。
今天我們會先來介紹一下什麼是 ORM !
依照維基百科的描述:
Object–relational mapping (ORM, O/RM, and O/R mapping tool) in computer science is a programming technique for converting data between a relational database and the heap of an object-oriented programming language. This creates, in effect, a virtual object database that can be used from within the programming language.
也就是使用資料庫與我們建立的 Model 模型,進行資料交換,
而不是直接使用下 SQL 的方式。
使用 ORM 大概可以分為以下優點:
提高可讀性
ORM 允許工程師使用 Model 模型來表示數據,不需要直接處理 SQL 查詢,使用這樣映射的方式,使代碼更具可讀性,也簡化了數據庫交互,減少了錯誤並提高了代碼的生產力。
安全性
昨天提到的 SQL injection ,ORM 可以確保有意人士不會直接在輸入攔直接下 SQL 到查詢中,從而提高應用程序的安全性。
易維護
ORM 可支援定義 Model 模型,不需要直接操作數據庫表結構。使數據庫設計和維護更加靈活。
支援多種數據庫
比如說 Express 的 ORM - Sequelize,就有支援 Oracle、Postgres、MySQL、MariaDB 等資歷庫,同樣的 Model 模型寫法可適用於這些資料庫。
當然,ORM 也不是完全沒有缺點的,以下為使用 ORM 可能會有的缺點:
效能問題
因為 ORM 是在中間有一層模型,來轉換成資料庫能看得懂的 SQL 語法,
在使用一般 CRUD 是沒什麼問題,但如果是很複雜的語法,
對於語法與映射間的轉換可能會帶來比原生 SQL 效能來的差。
不適合某些特定場景
如果需要 JOIN 多張表或計算複雜的運算來產生報表,使用原生 SQL 語法可能會相對還比較好寫。
入門門檻較高
因為 ORM 融合了程式與 SQL 語法,初學 ORM 到掌握使用可能需要花一點時間掌握熟悉。
ORM 的使用帶來了開發上的方便,可以提高開發效率並降低代碼錯誤的風險,
但是有些情境使用上反而不那麼適合,會使複雜度增加。
所以不是只要學習 ORM 就好,會下原生 SQL 語法還是後端工程師必備的技能!
以上今天對 ORM 的介紹就到這裡,
明天會介紹 Express 框架常用的 ORM - Sequelize
及常用到的實用 ORM 寫法啦~
大家明天見!
參考資料: