Lesson 55 — ORM vs Raw SQL

Ba module tương tác cho 3 ý cốt lõi của bài: (1) Tool spectrum picker — chọn tình huống, hệ thống gợi ý công cụ phù hợp trên trục raw→ORM; (2) N+1 visualizer — kéo số user, so sánh lazy (N+1 query) vs Preload (luôn 2 query); (3) Code comparison — cùng một query viết bằng raw / sqlx / sqlc / GORM cạnh nhau, kèm số dòng + badge type-safety.

1. Tool spectrum picker

Chọn một tình huống — công cụ gợi ý sẽ sáng lên trên spectrum bên dưới. Không nấc nào "xịn hơn", chỉ là đánh đổi control ↔ tiện.

◄ nhiều control / rawnhiều tiện / magic ►

2. N+1 visualizer — lazy vs Preload

Lấy danh sách user kèm post. Lazy: 1 query users + mỗi user 1 query posts = N+1. Preload: 1 query users + 1 query WHERE user_id IN (...) = luôn 2. Kéo thanh để đổi số user và xem số query nổ ra sao.

🔴 Lazy (N+1) — for u { db.Where("user_id=?",u.ID).Find() } 6 query
🟢 Preload — db.Preload("Posts").Find() 2 query

3. Code comparison — cùng 1 query, 4 cách viết

Query: "Lấy 1 user theo email". Xem 4 cách viết cạnh nhau — chú ý số dòng và mức type-safety mỗi cách.



  

Bảng đối chiếu nhanh

Công cụType-safetyControl SQLSQL ẩn?Boilerplate
database/sql (raw)ThấpToàn quyềnKhôngNhiều
sqlxThấp-TBToàn quyềnKhôngÍt
sqlcCaoToàn quyềnKhôngRất ít
GORMTB (runtime)Hạn chếNhiềuRất ít