2010年6月14日 星期一

Hibernate in Eclipse

本篇文章先不介紹Hibernate的相關內容,只著重在如何搭配Eclipse plugin來產生Hibernate的相關設定檔。

要讓Hibernate能夠work的最基本條件,就是需要有底下三種東西
1.Configuration File (hibernate.cfg.xml)
2.Mapping File (*.hbm.xml) ->hibernate 3.x 可以直接使用Annotation在DTO 中描述即可
3.DTO

依照下列的操作方式,一步一步即可 (注意 : 這裡亦不介紹hibernate plugin的安裝,之後的文章中再介紹)

步驟1:注意,這裡要選擇Others(圖片抓的不好)




步驟2 : 選擇 Hibernate Configuration File (cfg.xml),點選Next

步驟3 選擇檔案的存放路徑 ,點選Next
步驟4 : 因為這裡使用的是MS SQL 2008為範例資料庫,請注意,該套件預設的Driver class選單中,沒有正確的Driver可以選擇,所以自行輸入(com.microsoft.sqlserver.jdbc.SQLServerDriver)如下,不知道是不是因為MS SQL的支援很差,我沒試過其他資料庫,在這裡花了我不少的時間,抱怨一下,點選Next
 步驟5:請注意Project選擇的是正確的Project Name,點選Finish
 步驟6:產生底下的 hibernate.cfg.xml檔

 步驟7:先執行步驟1,然後底下選擇Hibernate reverse Engineering file (reveng.xml),點選Next
 步驟8:選擇檔案的存放路徑,點選Next
 步驟9:於Console configureationi中,請確定選擇的是正確的Project Name,這裡會去吃剛剛所產生的hibernate.cfg.xml檔,然後點選Refresh按鈕,於Database Schema中,會出現於hibernate.cfg.xml中定義的資料庫的資訊
 步驟10:這裡只使用Employees資料表作示範,所以於Database Schema的樹狀節點中,選擇Employee節點,然後點選按鈕include,點選Finish
 步驟11:產生底下檔案
 步驟12: 使用Hibernate Code Generation Configurations工具,產生*.hbm.xml及DTO檔
 步驟13:確認 Console configuration中選擇的Project Name,Output directory所指定的產生路徑,定義Package Name,最重要的是記得指定步驟7~11中所產生的reveng.xml檔
 步驟14:確認Exporters標籤設定如下
 步驟15:確定Common標籤設定如下,點選Run按鈕
步驟16:產生檔案如圖所示(com.Northwnd.model.employees,com.Northwnd.model.EmployeesHome, Employees.hbm.xml)
 步驟17:於hibernate.cfg.xml中加入Employees.hbm.xml的mapping定義如下


步驟18:新增一個com.xxx.Main.java檔,並撰寫程式碼如下
package com.xxx;

import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import com.Northwnd.model.Employees;;



public class Main {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Configuration cfg = new Configuration();
  cfg.configure();
  SessionFactory factory = cfg.buildSessionFactory();
  Session session = factory.openSession();
  
  Transaction tx = null;
  
  try
  {
   
   tx = session.beginTransaction();
   
   //query
   Query query = session.createQuery("from com.Northwnd.model.Employees");
   List list = (List)query.list();
   System.out.println("Count:"+list.size());
   for(int i = 0; i < list.size();i++)
   {
    System.out.println(i + ":" +list.get(i).getFirstName() + " " + list.get(i).getLastName());
   }
   
   tx.commit();
   
  }catch(HibernateException ex)
  {
   if(tx != null) tx.rollback();
   System.out.println(ex.getMessage());
  }
  finally
  {
   session.close();
   factory.close();
  }
 }

}



執行結果:


結論:
其實上面有幾個步驟需要些為調整,我不知道是不是因為hibernate plugin跟MS SQL不合,但這裡就先不描述,我想懂hibernate原理的人,就算code gen產生的檔案錯誤,應該也是有能力修改。本文章是為了介紹如何使用工具,來快速產生hibernate的相關程式碼,加速系統開發的效率。但這裡也不免要小小抱怨一下,雖然說是免費的工具,這要做一樣的效果,使用.NET的IDE,卻可以在一分鐘內做出一樣的結果,使用Hibernate的Eclipse plugin,花了十幾分鐘,但這是第一次,不過我想之後就算再熟練,速度都不可能比VS快,希望Java的Tool能趕快加油。

沒有留言: