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


17、如果表設計的時候帶有前綴比如Tbl_Entity。參照http://blog.sina.com.cn/s/blog_49baa8c001015kgt.html


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

It is indirectly referenced from required .class file

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

解決方法:導入缺失的包

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

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

import org.hibernate.cfg.reveng.DefaultReverseEngineeringStrategy;
import org.hibernate.cfg.reveng.ReverseEngineeringSettings;
import org.hibernate.cfg.reveng.ReverseEngineeringStrategy;
import org.hibernate.cfg.reveng.TableIdentifier;
import org.hibernate.util.StringHelper;

public class CustomReverseEngineeringStrategy extends
        DefaultReverseEngineeringStrategy {

    public CustomReverseEngineeringStrategy(ReverseEngineeringStrategy delegate) {
        super();
    }
   
    public CustomReverseEngineeringStrategy(){
    }

    private ReverseEngineeringSettings settings;
   
    @Override
    public String tableToClassName(TableIdentifier table) {
        String tableName = table.getName();
        if (tableName != null && tableName.toUpperCase().startsWith("TBL_")) {
            String pkgName = settings.getDefaultPackageName();
            int lastIndex = tableName.indexOf("_");
            tableName = tableName.substring(lastIndex + 1);

            String className = toUpperCamelCase(tableName);

      //      if (pkgName.length() > 0)
      //          return StringHelper.qualify(pkgName, className);
            return className;

        } else {
            return super.tableToClassName(table);
        }
    };

    public void setSettings(ReverseEngineeringSettings settings) {
        super.setSettings(settings);
        this.settings = settings;
    }
}
實際生成的代碼到了src下面。沒有指定到我要的包下,是因爲我註釋了上面2行代碼。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章