分享

eclipse利用Hibernate Tools生成Hibernate Mapping文件及PO类

 贾朋亮博客 2015-01-28

俗话说得不错,“变化总比计划快”。在项目,在我们这些程序员当中也是常常会遇到的问题。因为就算需求调研得再详细,往往一定还会修改的。为了适应变化,构造易维护易扩展的项目往往是我们的目标之一。

 

在使用数据库时,相信很多程序员会有我一样的烦恼。就是数据库发生变化时,项目中的hibernate配置的连锁反应,mapping映射需要修改,PO类需要更改等。使用JBossTools中的Hibernate Tools,将为我们解决这一大难题。

一、开发环境

JBoss Tools下载

http://www./tools/download.html

 

在这里,我是选择在线安装的方式。并且eclipse版本为3.6.2,所以我的选择是:http://www./tools/download/installation/update_3_2.html

 

(题外:安装完之后,你会发现eclipse的性能大增。除了html、JSP等编辑器外,还有诸多J2EE插件)

 

二、配置hibernate configurations

1.打开控件窗口

点击 window - open view - other

 

在hibernate文件夹下打开hibernate configurations

2.add configuration

配置数据库连接资源

 


图中的MySQL是我之前所创建的数据库连接,若之前没配置的话可以点击New,然后配置数据库连接。

 

查看数据库,测试是否正常。

 


三、Hibernate代码生成器

1. 增加Hibernate Code Generation按钮

点击 window - customize perspective


2.点击Hibernate Code Generation configuration


 

3.创建,管理代码生成配置


 

  • console configuration:选择在第二点中我们创建的数据库连接。
  • output directory:配置执行后输出的目录,生成hbm、PO类等。
  • package:包名,这里请输入PO类存放的路径。
  • reveng.xml:生成mapping和PO类的重要配置文件。
reveng.xml若没生成可以在这里创建。

3.hibernate.reveng.xml

reveng.xml文件,让我们可以控制插件生成后的hbm和PO类的各种属性。

 

以下是参考:

 

Xml代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE hibernate-reverse-engineering PUBLIC "-//Hibernate/Hibernate Reverse Engineering DTD 3.0//EN" "http://hibernate./hibernate-reverse-engineering-3.0.dtd" >  
  3.   
  4. <hibernate-reverse-engineering>  
  5.     <type-mapping>  
  6.         <sql-type jdbc-type="VARCHAR" length="1" hibernate-type="yes_no" />  
  7.         <sql-type jdbc-type="VARCHAR" length="21" not-null="false"  
  8.             hibernate-type="cn.com.timekey.drugmonitor.po.type.RoleEnumType" />  
  9.         <sql-type jdbc-type="VARCHAR" length="15" not-null="false"  
  10.             hibernate-type="cn.com.timekey.drugmonitor.po.type.PrescriptionTypeEnumType" />  
  11.     </type-mapping>  
  12.     <!-- BIN$ is recycle bin tables in Oracle -->  
  13.     <table-filter match-name="BIN$.*" exclude="true" />  
  14.       
  15.     <table-filter match-catalog="cmm" match-name=".*" />  
  16.   
  17.     <!-- table allows you to override/define how reverse engineering is done   
  18.         for a specific table -->  
  19.     <table name="user" catalog="cmm">  
  20.         <primary-key>  
  21.             <generator class="uuid.hex" />  
  22.             <key-column name="ID" />  
  23.         </primary-key>  
  24.     </table>  
  25. </hibernate-reverse-engineering>  
 

 

 

1.通过type-mapping代码块,我们可以自由的映射出数据库字段和hibernate中的对应字段。

 

 

Xml代码  收藏代码
  1. <sql-type jdbc-type="VARCHAR" length="1" hibernate-type="yes_no" />  
 

意思是:把数据库中VARCHAR类型并且长度为1的字段,映射成PO类的boolean属性。

 

 

Xml代码  收藏代码
  1. <sql-type jdbc-type="VARCHAR" length="21" not-null="false"  
  2.             hibernate-type="cn.com.timekey.drugmonitor.po.type.RoleEnumType" />  

 

同理,这里的意思是:把数据库中VARCHAR类型,长度为21的字段映射成我自定义的hibernate类型。

 

2.通过table-filter代码块,我们可以过滤及指定脚本的目标table。

 

 

Xml代码  收藏代码
  1. <table-filter match-catalog="cmm" match-name=".*" />  
 

意思是:cmm数据库下的所有表。

 

有些情况下,我们脚本执行的并非全部表,这里恰好可以轻松帮我们达到这个目的。

 

3.table代码块,提供给我们用来覆盖生成的mapping配置。

 

Xml代码  收藏代码
  1. <table name="user" catalog="cmm">  
  2.     <primary-key>  
  3.         <generator class="uuid.hex" />  
  4.         <key-column name="ID" />  
  5.     </primary-key>  
  6. </table>  
 

 

这里相信大家应该比较容易猜到了,是起到指定user表中的主键生成规则为uuid.hex。

 

4.自定义外键配置

 

 

Xml代码  收藏代码
  1. <foreign-key constraint-name="prescription_drug_ibfk_3">  
  2.     <column-ref local-column="DRUG_ID" />  
  3.     <many-to-one property="drug" cascade="save-update" />  
  4. </foreign-key>  

 

 

同样在<table>代码块内。

constraint-name:约束名,要对应外键的约束名字。

column-ref:配置外键字段名。

many-to-one:配置外键参数,包括属性名等,例中是添加cascade的级别为save-update。默认为空,即none。

 

 

更多的reveng.xml说明可参考:http://docs./tools/3.2.0.GA/en/hibernatetools/html_single/index.html#hibernaterevengxmlfile

 

4.选择导出的文件


在这里我是选择生成mapping的 hbm映射文件及PO类。DAO类一般会用自己的,并且很多时候都是与spring集成的环境下,所以作用不大。cfg.xml文件其实也有点用,导入hbm.xml映射文件的时候,可以参考此文件来拷贝了。

 

5.运行配置文件

这一切都OK之后,按下RUN键,即可生成我们想要的mapping映射文件及PO类了。

 

 

后记

生成的PO类并没有生成序列号是我比较纠结的,但从开发者的角度来看,这个也是可以理解。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多