直接回答
Hibernate 本身不直接生成 CRUD 方法程式碼,但配合 IDE 工具(如 MyEclipse、IntelliJ IDEA)的反向工程功能,可以根據資料庫表結構自動生成實體類及對應的 DAO 層基本增刪改查程式碼。
主流實現方式
1. MyEclipse 反向工程(傳統方案)
正如最佳答案所述,MyEclipse 內建 Hibernate 反向工程向導:
- 連線資料庫 → 選擇表 → 勾選「Generate DAO Classes」→ 完成。
- 產出:實體類、Hibernate 映射檔、通用 DAO 介面/實作(含 `save`、`update`、`delete`、`findById`、`findAll` 等)。
- 優點:圖形化操作,零配置上手快。缺點:強綁定 MyEclipse,生成程式碼風格較舊,需手動調整適配現代 Spring/Hibernate 版本。
2. IntelliJ IDEA + JPA Buddy / Hibernate Tools(現代主流)
- 安裝 JPA Buddy 外掛或使用內建「Persistence」工具窗 → 右鍵實體類 →「Generate Persistence Mapping」/「Generate DAO」。
- 支援 Spring Data JPA Repository 介面自動生成,無需手寫實作類,僅宣告介面繼承 `JpaRepository` 即擁有完整 CRUD。
3. Spring Data JPA:零程式碼 CRUD(推薦)
現代 Spring Boot 專案首選 Spring Data JPA:
public interface UserRepository extends JpaRepository<User, Long> {
// 無需寫任何實作,自動擁有 save、findById、findAll、delete 等方法
List<User> findByEmail(String email); // 甚至可依方法名自動生成查詢
}
這才是真正的「自動生成 CRUD」——框架執行期動態代理實現,而非產生靜態程式碼。
避坑指南
- 不要盲目信任生成的程式碼:反向工程產出的 DAO 往往使用 `HibernateTemplate` 或手動管理 Session,與現代 Spring 管理交易方式不符,建議改用 Spring Data JPA。
- 複雜查詢仍需手寫:自動生成僅覆蓋單表基本操作,多表關聯、動態條件、分頁優化等仍需開發者編寫 JPQL/SQL 或 Specifications。
- 實體類設計優先:先設計領域模型,再透過工具同步資料庫,而非反向生成實體類導向業務邏輯。
總結
Hibernate 配合 IDE 工具可生成靜態 CRUD 程式碼,但現代最佳實踐是使用 Spring Data JPA 介面式編程,實現零樣板程式碼的動態 CRUD。新專案建議直接採用 Spring Boot + Spring Data JPA 技術棧。