淺談 ORM


Posted by Wangpoching on 2021-10-06

有沒有覺得 SQL 的語法很麻煩,不同的資料庫有不同的 SQL 語法,對資料庫不外乎進行新增、查詢、編輯、刪除,有甚麼方法可以降低程式與資料庫之間的耦合關係或者簡化 SQL 的語法嗎? 有的,它就是所謂的 ORM。

甚麼是 ORM

Object-Relational Mapping (ORM)是將關聯式資料庫映射至物件導向的資料抽象化技術,對這個物件進行新增、查詢、編輯、刪除,底層的實作會使用相對應的 SQL 語法去操作資料庫。此時程式設計師不用再去管料庫是使用哪一種類型(如:SQL Server、Oracle、DB2、MySQL、Sybase...),同一套語法便可以了,這便是因為 ORM 為程式設計師還有資料庫之間搭起了一道橋樑。

也許這麼想 ORM 會更好,它就像一個翻譯,原本你必須會資料庫的語言,用資料庫的語言跟資料庫溝通,但有了 ORM,你可以將需求用你熟悉的物件導向程式語言告訴 ORM,ORM 再用資料庫的語言將你的請求翻譯給資料庫。

img

ORM 的優點

  1. ORM 可以防止 SQL-Injection 的攻擊
  2. 方便轉移資料庫,當資料庫發生改變時,只需要修改映射關係即可
  3. 不用考慮該死的 SQL 語句,語法簡化
  4. 通用性:

舉例來說下面這兩個 MySQL、MsSQL 的語法做的其實是一樣的事情

// MySQL
SELECT * FROM Menu WHERE price=100 LIMIT 10
// MsSQL
SELECT TOP 10 * FROM TestTable WHERE price=100

ORM 的缺點

  1. 對於複雜的查詢,ORM 的使用上支援度不好,可能還要額外寫入原生的 SQL 語法。
  2. 延伸上一個缺點,使用 ORM 的使用者在需要用到 SQL 語法的時候經常不熟練。

看到一個有趣的關於 Ruby 案例是這樣子的,這便是額外使用原生 SQL 語法的案例。

User.where(“age between ? and ?”,10,30)

#ORM #MSSQL #MySQL







Related Posts

[Week4] - TCP/IP四層模型

[Week4] - TCP/IP四層模型

PHP CodeIgniter 資料庫字詞替換

PHP CodeIgniter 資料庫字詞替換

斷捨離的一週

斷捨離的一週


Comments