庫表複雜度取決於業務需求,非設計工具決定。無論用 Hibernate 還是 iBATIS,範式規範、關聯設計皆須遵循。為了迎合 ORM 強行拆表、建一對一,反而增加維護成本。
| 維度 | Hibernate | iBATIS |
|---|---|---|
| 增刪改(實體維護) | 極強,自動狀態管理、級聯、延遲載入 | 需手寫 SQL,多對多維護麻煩 |
| 動態查詢/報表 | HQL/ Criteria 複雜,動態條件易生成壞 SQL,命名查詢參數固定 | XML 模板式動態 SQL,靈活、集中、易 Code Review |
| 原生 SQL 支援 | 支援但破壞 DAO 簡潔性,動態拼接程式碼冗長 | 原生 SQL 即核心,模板機制天然適配 |
| 調優(早期/晚期) | SQL 隱藏在代碼/日誌,早期難發現;晚期調優受限 | SQL 顯式在 XML,早期 Review 易發現 Bad SQL;晚期加冗余表、中間表極其方便 |
| 開發速度 | 需高手駕馭,否則復雜關聯拖慢進度 | 上手快,SQL 直觀,適合無高手團隊 |
| 跨資料庫移植 | 方言機制完善,優勢明顯 | SQL 含方言差異,移植需改寫 |
| 維護性 | 表結構變更波及映射文件與實體 | 同樣需改,但 SQL 可讀性更強 |
作者專案採用:
Spring 統一事務管理,兩者共存無衝突。
iBATIS 作者建議「新專案用 Hibernate,舊專案用 iBATIS」並無定論。關鍵在於:理解業務複雜度、團隊能力、演進需求,選擇最適合當下的工具組合。簡單帶來快樂,正如從 EJB 到 Spring 的思想重生。