今天來談談,當初困擾我很久的 ORM...
首先 ORM(Object-Relational Mapping)是一種軟體開發模式,它允許應用程式以物件導向的方式來操作關聯式資料庫。
簡而言之,ORM將資料庫中的表格、欄位、關聯等映射到程式語言中的物件,使開發者可以使用物件的方式來操作資料庫,而不必直接撰寫 SQL 查詢。
這邊我們使用 Ruby、ActiveRecord 做個簡單的示範:
我們創建一個 User model
class User < ActiveRecord::Base
end
使用 ORM 可以這樣做:
## 查詢所有使用者
all_users = User.all
## 查詢特定使用者
user = User.find_by(id: 1)
##創建新的使用者
new_user = User.create(name: "John", email: "john@example.com")
## 更新使用者
user.update(name: "Updated Name")
## 刪除使用者
user.destroy
如果使用原生的 SQL
## 查詢所有使用者
require 'pg'
conn = PG.connect(dbname: 'your_database_name', user: 'your_username', password: 'your_password')
result = conn.exec('SELECT * FROM users')
all_users = result.map { |row| { id: row['id'], name: row['name'], email: row['email'] } }
## 查詢特定使用者
result = conn.exec_params('SELECT * FROM users WHERE id = $1', [1])
user = result[0]
## 創建新使用者
conn.exec_params('INSERT INTO users (name, email) VALUES ($1, $2)', ["John", "john@example.com"])
## 更新使用者
conn.exec_params('UPDATE users SET name = $1 WHERE id = $2', ["Updated Name", 1])
## 刪除使用者
conn.exec_params('DELETE FROM users WHERE id = $1', [1])
是不是使用 ORM 簡單直觀很多呢!
簡化資料庫操作:ORM隱藏了資料庫細節,開發者不必直接處理SQL查詢和資料庫連接,使資料庫操作變得更容易。
物件導向:ORM使開發者能夠使用物件導向的編程模型,這更接近應用程式的邏輯和語言,提高了程式碼的可讀性和維護性。
跨資料庫支援:多數ORM工具支援多種資料庫系統,這使應用程式更具可移植性,可以輕鬆切換資料庫。
提高生產力:ORM減少了重複的資料庫操作程式碼,可以節省開發時間並提高生產力。
自動映射:ORM工具通常提供自動映射資料庫表格和物件的功能,減少了手動配置的需求。
學習曲線:學習使用ORM可能需要一些時間,特別是對於新手來說,需要了解ORM的概念和操作方式。
性能問題:某些ORM工具可能在處理大量資料或複雜查詢時引入性能問題,因為生成的SQL查詢可能不是最佳的。
失去控制:使用ORM有時會導致開發者失去對SQL查詢和資料庫細節的控制,這可能對某些特殊場景不適用。
不適合所有情況:ORM不適合所有應用程式,特別是對於需要高度優化的資料庫操作,或是需要複雜的JOIN操作的情況。
總結來說,ORM是一個方便的工具,特別適合中小型應用程式和快速開發,可以提高開發速度並降低錯誤。
但我們需要根據具體的應用程式需求和性能要求來決定是否使用ORM,以及何時使用ORM。
有時,使用原生SQL仍然是更好的選擇,這一點也是我未來必須要學習了解的地方😂
我們明天見!!