zoukankan      html  css  js  c++  java
  • 利用MiddleGen-hibernate-r5生成hbm文件及POJO文件

    1       先决条件

    1.1    已安装JDK(版本1.5以上)并配置环境变量

             到http://java.sun.com上下载JDK,配置环境变量(我的电脑右键->属性->高级->环境变量)

    JAVA_HOME:JDK安装目录

    CLASS_PATH:JDK安装目录lib

    PATH:JDK安装目录in

    1.2    已安装ant并配置环境变量

             点击http://apache.mirror.phpchina.com/ant/binaries/apache-ant-1.7.1-bin.zip 下载ant并解压,设置环境变量(我的电脑右键->属性->高级->环境变量)

    ANT_HOME:ant解压目录

    path="ant解压目录in"

    之后再“运行”输入cmd---ant 提示如下 说明ant安装正确

    1.3    MiddleGen下载

        点击http://jaist.dl.sourceforge.net/sourceforge/hibernate/Middlegen-Hibernate-r5.zip下载Middlegen-Hibernate-r5并解压

    2       所需jar包

             生成hbm文件所需jar包

    由于本例使用的是Mysql数据库,所以需要:

                  mysql-connector-java-5.1.11-bin.jar

             生成POJO时所需jar包

    hibernate3.jar

    dom4j-1.6.1.jar

    可以点击

    http://nchc.dl.sourceforge.net/sourceforge/hibernate/hibernate-distribution-3.3.1.GA-dist.zip 下载,dom4j-1.6.1.jar位于 hibernate-distribution-3.3.1.GAlib equired下(也可以通过http://nchc.dl.sourceforge.net/sourceforge/dom4j/dom4j-1.6.1.zip 下载)

     

    hibernate-tools.jar

    freemarker.jar

    可以点击

    http://jaist.dl.sourceforge.net/sourceforge/jboss/HibernateTools-3.2.4.Beta1-R200810311334.zip 下载,解压后jar包位于

    pluginsorg.hibernate.eclipse_3.2.4.Beta1-R200810311334lib ools

     

    slf4j-api-1.5.2.jar

    slf4j-jdk14-1.5.2.jar

    slf4j-log4j12-1.5.2.jar

    可以点击http://www.slf4j.org/dist/slf4j-1.5.2.zip 下载

    3       生成过程

    将下载的MiddleGen-Hibernate-r5解压到任一目录,并在build目 录下新建一个文件夹mysrc

    3.1    生成hbm文件

    1. 将Middlegen-Hibernate-r5.zip解压至你所希望的目录,本例放再d根目录下
    2. 进入D:Middlegen-Hibernate-r5configdatabase找到你想使用的数据库配置文件(.xml)本例使用mysql.xml
    3. 打开mysql.xml对其配置如下:

    原文內容

       <property name="database.script.file"           value="${src.dir}/sql/${name}-mysql.sql"/>

       <property name="database.driver.file"           value="${lib.dir}/mysql-connector-java-3.0.16-ga-bin.jar"/>

       <property name="database.driver.classpath"      value="${database.driver.file}"/>

       <property name="database.driver"                value="org.gjt.mm.mysql.Driver"/>

       <property name="database.url"                   value="jdbc:mysql://localhost/employee"/>

       <property name="database.userid"                value="root"/>

       <property name="database.password"              value="root"/>

       <property name="database.schema"                value=""/>

       <property name="database.catalog"               value=""/>

       <property name="jboss.datasource.mapping"       value="mySQL"/>

    修改

    <property name="database.driver.file"        value="${lib.dir}/mysql-connector-java-3.0.16-ga-bin.jar"/>

    将紅字部分改为你所导入的mysql驱动包名(驱动应放在放再D:Middlegen-Hibernate-r5lib下)

    <property name="database.url"                   value="jdbc:mysql://localhost/employee"/>

    设置mysql的url

    <property name="database.userid"                value="root"/>

    <property name="database.password"              value="root"/>

    设置用户名、密码 

    1. 保存完成
    2. 修改Middlegen根目录下的build.xml

     

     

    MiddleGen界面说明
    进入Middlegen的GUI界面后,可以看到,数据库中的表结构已经导入到MiddleGen的操作界面中,选定数据库表视图中的表元素,我们即可调整各个数据库表的属性。

    1.Domain Class Name   对应POJO的类名。

    2.Key Generator

      主键生成器

      可选项说明:

       ①assigned.主键由外部程序生成,无需Hibernate参与。

       ②hilo 通过hi/lo算法实现的主键生成机制,需要额外的数据库表保存主键生成历史状态。

       ③seqhilo  与hilo类似,通过hi/lo算法实现的主键生成机制,只是主键历史状态保存在Sequence中,适用于支持Sequence的数据库,如 Oracle。

       ④increment  主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键。这种方式可能产生的问题是,如果当前有多个实例访问同一个数据库,那么由于各个实例各自维护主键状态,不同实例可能产生相同主键,从而造成主键重复异常。因此,同一数据库有多个实例访问,此方式必须避免使用。

       ⑤identity  采用数据库提供的主键生成机制。如 DB2,sql server,Mysql中的主键生成机制。

       ⑥sequence 采用数据库提供的sequence机制生成主键。如oracle中的sequence机制。

       ⑦native  由Hibernate根据底层数据库自行判断采用identity,hilo,sequence其中一种作为主键生成方式。 

       ⑧uuid.hex 由Hibernate基于128位唯一值产生算法生成16进制数值(编码后以长度32的字符串表示)作为主键。

       ⑨uuid.string 与uuid.hex类似,只是生成的主键未进行编码(长度16).在某些数据库中可能出现问题(如PostgreSQL)。

       ⑩foreign 使用外部表的字段作为主键。

    一般而言,使用uuid.hex方式生成主键将提供最好的性能和数据库平台适应性。

    另外,由于常用的数据库,如oracle,DB2,SqlServer,MySql等,都提供了易用的主键生成机制(auto-Increase字段或者sequence)。我们可以在数据库提供的主键生成机制上,采用generator-class=native的主键生成方式。

    3.key-generator后面的可输入部分。  如果需要采用定制的主键产生算法,则在此处配置主键生成器,主键生成器必须实现net.sf.hibernate.id.IdentifierGenerator接口。

    4.Schema Name  数据库Schema Name 

    5.Persister 自定义持久化实现类类名。如果系统中还需要Hibernate之外的持久层实现机制,如通过存储过程得到目标数据集,甚至从LDAP中获取数据来填充我们的POJO。

    6.Enable proxies 是否使用代理(用于延迟加载[Lazt Loading])

    7.Dynamic Update  如果选定,则生成UPDATE SQL时不包含未发生变动的字段属性,这样可以在一定程度上提升sql执行效能。

    8.Mutable  类是否可变,默认为选定(可变)。如果不希望应用程序对此类对应的数据进行修改(如对于数据库视图),则可取消其选定状态,之后对此类的delete和update都将失效。

    9.Lifestyle interface  是否实现lifestyle接口。lifestyle接口提供了数据固化过程中的控制机制,通过实现该接口,我们可以在数据库操 中加入回调机制,如在数据库操作之前,之后触发指定操作。

    10.Validatable interface  是否实现Validatable 接口。通过实现Validatable 接口,我们可以在数据被固化到数据库表之前对其合法性进行验证。要注意的是,通过实现lifestyle接口,同样可以在数据库操作之前进行合法性验证。不同的是,Validatable 接口中定义的方法可能会被多次调用,因此设计中应避免在Validatable 接口的validate方法的实现中加入业务逻辑的验证。

    3.2    生成POJO

    将以下jar包复制到MiddleGen-Hibernate-r5文件夹lib目录

    hibernate3.jar, hibernate-tools.jar, dom4j-1.6.1.jar, slf4j-log4j12-1.5.2.jar, slf4j-api-1.5.2.jar, slf4j-jdk14-1.5.2.jar, freemarker.jar

    再次打开build.xml文件

    修改第212行

    <target name="hbm2java" description="Generate .java from .hbm files.">

          <taskdef

             name="hbm2java"

             classname="net.sf.hibernate.tool.hbm2java.Hbm2JavaTask"

             classpathref="lib.class.path"

          />

       <hbm2java output="${build.gen-src.dir}">

                         <fileset dir="${build.gen-src.dir}">

                                <include name="**/*.hbm.xml"/>

                         </fileset>

                  </hbm2java>

       </target>

    <target name="hbm2java" description="Generate .java from .hbm files.">

          <taskdef

             name="hbm2java"

             classname="org.hibernate.tool.ant.HibernateToolTask"

             classpathref="lib.class.path"

          />

          <hbm2java destdir="${build.gen-src.dir}">

                  <configuration>

                         <fileset dir="${build.gen-src.dir}">

                                <include name="**/*.hbm.xml"/>

                         </fileset>

                         </configuration>

                         <hbm2java jdk5="true"/>

                  </hbm2java>

       </target>

    由于Middlegen生成的hbm文件是里面的引用是hibernate2的DTD,因此修改生成的hbm.xml里面hibernate2的DTD 由

    <!DOCTYPE hibernate-mapping PUBLIC

        "-//Hibernate/Hibernate Mapping DTD 2.0//EN"

    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >

    变为

    <!DOCTYPE hibernate-mapping PUBLIC

        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >

    (也就是将2变为3,这样就不会出现“Don’t use old DTDs,read the Hibernate3.x Migration Guide!”错误)

    运行ant hbm2java,生成的POJO文件位于buildmysrcmodel文件夹下。

  • 相关阅读:
    PyCharm不能使用Tab键进行整体向左缩进解决方法
    Python代码规范(PEP8)问题及解决
    Python学习开始
    Spring Annotation(@Autowire、@Qualifier)
    Spring自动装配
    servlet验证码
    Spring集合装配
    帐号明文传输漏洞
    java单元测试
    项目building workspace很慢,或者直接内存溢出的问题解决办法。
  • 原文地址:https://www.cnblogs.com/xrab/p/5367417.html
Copyright © 2011-2022 走看看