開源物件關聯映射 (ORM) 框架,對 JDBC 進行輕量封裝,建立物件與資料表映射。特點:全自動、完全面向物件 的持久層框架,SQL 自動生成,開發者專注於物件操作。
原名 iBATIS,2010 年由 Google 接管更名。開源 ORM 框架,特點:半自動化 持久層框架,SQL 需手動編寫,提供精細控制。
| 維度 | Hibernate | MyBatis |
|---|---|---|
| 開發效率 | SQL 封裝好,直接使用,簡單 CRUD 開發快 | SQL 手寫,稍繁瑣,但複雜查詢更可控 |
| SQL 優化 | 自動生成 SQL,可能冗長、效能稍差 | 手寫 SQL,可精準控制查詢欄位、Join 方式、索引利用 |
| 物件管理 | 完整 ORM,管理物件狀態、脏檢查、延遲載入 | 需自行管理映射關係,較輕量 |
| 快取機制 | 完善的一級/二級快取,支援第三方快取(Ehcache、Redis) | 二級快取配置在各 Mapper 中,可按表自訂,支援 cache-ref 共享 |
| 資料庫移植性 | 優,方言機制自動適配不同資料庫 | 差,不同資料庫需寫不同 SQL |
| 學習曲線 | 陡峭,概念多(Session、快取、鎖、HQL) | 平緩,接近原生 SQL,易上手 |
| 適用場景 | 中小型專案、標準化 CRUD 多、團隊 Hibernate 經驗豐富 | 大型複雜系統、SQL 優化需求高、團隊偏好掌控 SQL |
| 特性 | Hibernate | MyBatis |
|---|---|---|
| 配置層級 | SessionFactory 層級全域配置,再在映射檔指定策略 | 每個 Mapper (namespace) 獨立配置,不同表可用不同策略 |
| 共享機制 | 透過快取區域名稱共享 | cache-ref 直接引用其他 namespace 快取實例 |
| 髒資料風險 | 機制完善,自動處理 | 需謹慎使用,避免快取不一致 |
<if>、<choose>、<foreach> 等)MyBatis:小巧、直接、高效、簡單、半自動化 — 掌控 SQL 的藝術家
Hibernate:強大、便利、高效、複雜、間接、全自動化 — 物件持久化的重型坦克