1. 程式人生 > >hibernate tools自動生成entity程式碼

hibernate tools自動生成entity程式碼

1、eclipse下載安裝jboss tools外掛

2、新建hibernate.cfg.xml


3、選擇檔案生成路徑一般在 Project的配置檔案存放地點resource。因為用maven建立所以放在src\main\resource下面


4、hibernate.cfg.xml 配置資訊

sessonFactory 名字:oracle最好統一成 sessonFactory

控制檯配置檔案生成選項checkbox 打鉤。oracle可以填寫schema :資料庫表空間來過濾表,sqlserver可以選擇catalog來過濾。或者可以在生成的配置檔案裡面修改


5、console configuration配置檔案生成

輸入配置檔案資訊 :檔名

生成路徑:在哪個專案下面

資料庫連線:沒有就新建


6、新建的資料庫連線


驅動jar新增


點選ok 完成


7、選擇hibernate.cfg.xml


8、ok以後的可以看見hibernate控制檯配置資訊


9、配置hibernate自動生成反向生成配置檔案hibernate.reveng.xml 


10、新建配置檔案


11、輸入配置資訊 :名字

      控制檯配置檔案:就是剛才生成的console configuration

      輸出目錄:生成的檔案存放的 src目錄


12、輸入包名:生成檔案到哪個包下面。

       hibernate.reveng.xml 控制檯配置檔案生成路徑:仍然選擇src\main\resources


13、生成以後可以選擇要生成的表

14、完成以後畫面

15、選擇exporters tab標籤選中 生成型別。選擇要生成的檔案

      可以選擇domain code 和hibernate xml configuration因為使用了註解所以可以不用hbm.xml了

16、apply以後 點選run

可以選擇生成策略類來格式化要生成的類的名字欄位。可能會遇到:

It is indirectly referenced from required .class file

原因:你正要使用的類呼叫了另一個類,而這個類又呼叫了其他類,這種關係可能會有好多層。而在這個呼叫的過程中,某個類所在的包的缺失就會造成以上那個錯誤。

解決方法:匯入缺失的包

browse選擇你寫的策略類就可以了。期間可能要下載jar包

hibernate-tools包和hibernate-core包因為這個類用到了hibernate的東西。

  1. import org.hibernate.cfg.reveng.DefaultReverseEngineeringStrategy;  
  2. import org.hibernate.cfg.reveng.ReverseEngineeringSettings;  
  3. import org.hibernate.cfg.reveng.ReverseEngineeringStrategy;  
  4. import org.hibernate.cfg.reveng.TableIdentifier;  
  5. import org.hibernate.util.StringHelper;  
  6. publicclass CustomReverseEngineeringStrategy extends
  7.         DefaultReverseEngineeringStrategy {  
  8.     public CustomReverseEngineeringStrategy(ReverseEngineeringStrategy delegate) {  
  9.         super();  
  10.     }  
  11.     public CustomReverseEngineeringStrategy(){  
  12.     }  
  13.     private ReverseEngineeringSettings settings;  
  14.     @Override
  15.     public String tableToClassName(TableIdentifier table) {  
  16.         String tableName = table.getName();  
  17.         if (tableName != null && tableName.toUpperCase().startsWith("TBL_")) {  
  18.             String pkgName = settings.getDefaultPackageName();  
  19.             int lastIndex = tableName.indexOf("_");  
  20.             tableName = tableName.substring(lastIndex + 1);  
  21.             String className = toUpperCamelCase(tableName);  
  22.       //      if (pkgName.length() > 0)
  23.       //          return StringHelper.qualify(pkgName, className);
  24.             return className;  
  25.         } else {  
  26.             returnsuper.tableToClassName(table);  
  27.         }  
  28.     };  
  29.     publicvoid setSettings(ReverseEngineeringSettings settings) {  
  30.         super.setSettings(settings);  
  31.         this.settings = settings;  
  32.     }  
  33. }  
實際生成的程式碼到了src下面。沒有指定到我要的包下,是因為我註釋了上面2行程式碼。