在傳統 JDBC 開發中,DAO 層充斥著 SQL 字串拼接、PreparedStatement 設定參數、ResultSet 手動映射到物件的樣板程式碼。現代 Java Web 專案幾乎看不到裸 SQL,取而代之的是呼叫 userRepository.save(user) 這類方法。這背後是什麼技術?
ORM 是一種程式設計技術,用於實現面向對象程式語言裡不同類型系統的資料轉換。簡單說,它自動處理 Java 物件 (Entity) ⇔ 關聯式資料庫表格 之間的映射與轉換。
| 框架 | 類型 | 特點 | 適用場景 |
|---|---|---|---|
| Hibernate | 全自動 ORM | 完全封裝 SQL;強大的快取機制;HQL/JPQL 查詢語言;學習曲線陡峭 | 複雜領域模型、重業務邏輯、標準化企業應用 |
| MyBatis | 半自動 ORM (SQL Mapping) | 保留 SQL 控制權;XML/註解配置 SQL;映射靈活;效能調優容易 | 高併發、複雜報表、需精細控制 SQL、團隊偏好寫 SQL |
| iBATIS | MyBatis 前身 | 已停止維護,不建議新專案使用 | 維護舊系統 |
| JPA (標準) + Hibernate/EclipseLink | 標準規範實作 | 程式碼可攜帶;Spring Data JPA 極大簡化開發 | Spring Boot 專案、微服務、追求標準化 |
@Entity, @Table, @Column) 或 XML 定義類別與資料表對應。@Query 或 Specifications。「沒有 SQL 字串」並非魔法,而是 ORM 框架幫你做了繁瑣的對映與轉換工作。理解 ORM 原理 (尤其是 Session 管理、延遲載入、N+1 問題) 比會用 API 更重要。選對工具,讓框架處理 80% 的標準 CRUD,將精力集中在 20% 的複雜業務邏輯與效能調優上。