职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 655|回复: 1

基于Ant+Hibernate Tools 的实体层生成方案

[复制链接]
能文能武 发表于 2011-8-18 09:44 | 显示全部楼层 |阅读模式
生成方案以DB-->hbm.xml-->Pojo为例

ant的build文件
  1. <?xml version="1.0"  encoding="UTF-8" ?>   
  2. <project name="kums-Hibernate" basedir="." default="hibernatecode">   
  3.     <property name="build.classpath" location="D:\jdk1.5.0_03" />   
  4.     <property name="src.dir" location="../../src" />   
  5.     <property name="build.dir" location="${app.dir}/WEB-INF/classes" />   
  6.     <property name="lib.dir" location="${app.dir}/WEB-INF/lib" />   
  7.   
  8.          <!-- 引用的库 -->   
  9.     <path id="toolslib">   
  10.         <path location="lib/hibernate-tools.jar" />   
  11.         <path location="lib/hibernate3.jar" />   
  12.         <path location="lib/commons-logging.jar" />   
  13.         <path location="lib/dom4j-1.6.1.jar" />   
  14.         <path location="lib/ojdbc14.jar" />   
  15.         <path location="lib/commons-collections-3.2.1.jar" />   
  16.         <path location="lib/freemarker.jar" />   
  17.         <path location="lib/jtidy-r8-20060801.jar" />   
  18.     </path>   
  19.   
  20.     <taskdef name="hibernatetool" classname="org.hibernate.tool.ant.HibernateToolTask" classpathref="toolslib">   
  21.     </taskdef>   
  22.   
  23.     <target name="hibernatecode">   
  24.         <hibernatetool destdir="${src.dir}/generated">   
  25.             <jdbcconfiguration propertyfile="${src.dir}/hibernate.properties" packagename="com.kurui.kums._entity" />   
  26.             <!--由DB导出hbm.xml文件-->   
  27.             <hbm2hbmxml />   
  28.             <!-- 由hbm.xml文件生成POJO文件 -->   
  29.             <hbm2java jdk5="true" />   
  30.             <!-- 生成配置文件 -->   
  31.             <hbm2cfgxml ejb3="false" />   
  32.             <!-- 生成的dao -->   
  33.             <hbm2dao />   
  34.         </hibernatetool>   
  35.     </target>   
  36. </project>  
复制代码
  1. <?xml version="1.0"  encoding="UTF-8" ?>
  2. <project name="kums-Hibernate" basedir="." default="hibernatecode">
  3.         <property name="build.classpath" location="D:\jdk1.5.0_03" />
  4.         <property name="src.dir" location="../../src" />
  5.         <property name="build.dir" location="${app.dir}/WEB-INF/classes" />
  6.         <property name="lib.dir" location="${app.dir}/WEB-INF/lib" />

  7.          <!-- 引用的库 -->
  8.         <path id="toolslib">
  9.                 <path location="lib/hibernate-tools.jar" />
  10.                 <path location="lib/hibernate3.jar" />
  11.                 <path location="lib/commons-logging.jar" />
  12.                 <path location="lib/dom4j-1.6.1.jar" />
  13.                 <path location="lib/ojdbc14.jar" />
  14.                 <path location="lib/commons-collections-3.2.1.jar" />
  15.                 <path location="lib/freemarker.jar" />
  16.                 <path location="lib/jtidy-r8-20060801.jar" />
  17.         </path>

  18.         <taskdef name="hibernatetool" classname="org.hibernate.tool.ant.HibernateToolTask" classpathref="toolslib">
  19.         </taskdef>

  20.         <target name="hibernatecode">
  21.                 <hibernatetool destdir="${src.dir}/generated">
  22.                         <jdbcconfiguration propertyfile="${src.dir}/hibernate.properties" packagename="com.kurui.kums._entity" />
  23.                         <!--由DB导出hbm.xml文件-->
  24.                         <hbm2hbmxml />
  25.                         <!-- 由hbm.xml文件生成POJO文件 -->
  26.                         <hbm2java jdk5="true" />
  27.                         <!-- 生成配置文件 -->
  28.                         <hbm2cfgxml ejb3="false" />
  29.                         <!-- 生成的dao -->
  30.                         <hbm2dao />
  31.                 </hibernatetool>
  32.         </target>
  33. </project>
复制代码
问题

1.org.hibernate.cfg.JDBCBinderException: Duplicate class name 'com.kurui.kums._entity.Countries' generated for 'org.hibernate.mapping.Table(SH.COUNTRIES)'. Same name where generated for 'org.hibernate.mapping.Table(SH.COUNTRIES)'

Oracle下见此问题,在hibernate.properties里加上hibernate.default_schema=username 即可

2.表较多的情况下,可否将生成的hbm.xml和Pojo指定到不同的目录下?

3.关于使用模版。
实际需求中往往还需要为PoJo生成的过程中定义一些规则(首字母、前缀等、自定义代码等),网上资料看都提到了使用模版,如下:
  1. <!--运用模板生成自己想要的类-->           
  2. <hbmtemplate templatepath="template" template="dao/daohome"  
  3.                 filepattern="{package-name}/{class-name}Dao.java">   
  4.                 <property key="ejb3" value="false"/>   
  5.                 <property key="jdk5" value="true"/>   
  6.             </hbmtemplate>   

  7. <hbmtemplate templatepath="template" template="dao/daohome"
  8.                 filepattern="{package-name}/{class-name}Dao.java">
  9.                 <property key="ejb3" value="false"/>
  10.                 <property key="jdk5" value="true"/>
  11.             </hbmtemplate>
复制代码
生成pojo类,其实hbm2java,hbm2dao都是hbmtemplate的一个简化版本,可以用宏理解
其中hbm2java等价于:但是此处的模板位置都是在heibernate-tool.jar中。如果需要自定义模板,则需要明确编写hbmtemplate。
  1. <hbmtemplate    templateprefix="pojo/"    template="pojo/Pojo.ftl"            
  2.     filepattern="{package-name}/{class-name}.java">   
  3.     <property key="jdk5" value="true" />   
  4.     <property key="ejb3" value="true" />   
  5. </hbmtemplate>  

  6. <hbmtemplate    templateprefix="pojo/"    template="pojo/Pojo.ftl"         
  7.     filepattern="{package-name}/{class-name}.java">
  8.     <property key="jdk5" value="true" />
  9.     <property key="ejb3" value="true" />
  10. </hbmtemplate>
复制代码
或者是
  1. <hibernatetool destdir="${build.dir}/generated">     
  2. <classpath/>     
  3. <configuration configurationfile="hibernate.cfg.xml"/>     
  4. <!-- 用户模板 -->     
  5. <hbmtemplate exporterclass="my.own.Exporter" filepattern="."/>     
  6. </hibernatetool>   

  7. <hibernatetool destdir="${build.dir}/generated">  
  8. <classpath/>  
  9. <configuration configurationfile="hibernate.cfg.xml"/>  
  10. <!-- 用户模板 -->  
  11. <hbmtemplate exporterclass="my.own.Exporter" filepattern="."/>  
  12. </hibernatetool>
复制代码
我的问题是,Pojo.ftl和exporterclass如何定义、如何引用,可有案例可供参阅?


feiguo 发表于 2011-8-18 09:44 | 显示全部楼层
建议可以考虑使用注解驱动了。
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-5-16 03:17 , Processed in 0.149560 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表