利用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安装目录\bin
1.2 已安装ant并配置环境变量
点击http://apache.mirror.phpchina.com/ant/binaries/apache-ant-1.7.1-bin.zip 下载ant并解压,设置环境变量(我的电脑右键->属性->高级->环境变量)
ANT_HOME:ant解压目录
path="ant解压目录\bin"
之后再“运行”输入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.GA\lib\required下(也可以通过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包位于
plugins\org.hibernate.eclipse_3.2.4.Beta1-R200810311334\lib\tools
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文件
- 将Middlegen-Hibernate-r5.zip解压至你所希望的目录,本例放再d根目录下
- 进入D:\Middlegen-Hibernate-r5\config\database找到你想使用的数据库配置文件(.xml)本例使用mysql.xml
- 打开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-r5\lib下)
<property name="database.url" value="jdbc:mysql://localhost/employee"/>
设置mysql的url
<property name="database.userid" value="root"/>
<property name="database.password" value="root"/>
设置用户名、密码
- 保存完成
- 修改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文件位于build\mysrc\model文件夹下。
利用MiddleGen-hibernate-r5生成hbm文件及POJO文件的更多相关文章
- 实体类,bean文件,pojo文件夹,model文件夹都一样
实体类,bean文件,pojo文件夹,model文件夹都一样,这些都是编写实体类,这是我暂时看到的项目文件
- eclipse 逆向生成hbm配置文件及pojo
1.eclipse配置hibernate环境 由于在公司中不能在线安装jboss Tools,只能简单介绍手动安装 在jboss官网下载对应自己eclipse的压缩包. 在eclipse 中选择Hel ...
- intellij配置hibernate自动生成hbm.xml文件
1.首先创建一个Java web项目,这里因为已经在整个项目中配置好tomcat了,所以我是直接创建module的,其实和创建project的配置方法一样,创建的时候选择Web Application ...
- [原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点,在hibernate 中 java类型 与sql类型之间的对应关系,Java 时间和日期类型的映射,Java 大对象类型 的 映射 (了解),映射组成关系
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- hibernate自动生成映射文件
映射文件是O/R Mapping的关键,相当于控制中心.当数据库表较多时,手动配置该映射文件非常耗时.为了快速开发程序,使开发人员的注意力集中到业务逻辑上来,Hibernate官方提供的MiddleG ...
- [转]hibernate在eclipse的逆向工程生成hbm.xml和bean类
原文地址:http://www.xuebuyuan.com/210489.html 以前一直用myelipse,在myeclipse做hibernate逆向工程倒是很顺手了. 可是最近改用eclips ...
- 【转】Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句
原文链接:http://www.cnblogs.com/quanyongan/p/3152290.html 最近在使用Hibernate4中,发现两个很有奥秘的注解 @DynamicInsert 和 ...
- hibernate多生成一个外键以及映射文件中含有<list-index>标签
(原文地址: http://blog.csdn.net/xiaoxian8023/article/details/15380529) 一.Inverse是hibernate双向关系中的基本概念.inv ...
- Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句
最近在使用Hibernate4中,发现两个很有奥秘的注解 @DynamicInsert 和 @DynamicUpdate 如果是在配置文件的话那就是dynamic -insert 和 dynamic- ...
随机推荐
- 自定义 Preference Header 布局
1. Preference Header 概述: 对于什么是 Preference Header,以及何时使用 Preference Header,请参考我的另一篇博文: 何时使用 Preferenc ...
- CSS特殊性
样式的优先级取决于特殊性,特殊性为0,0,0,0 Ø每个元素或伪元素选择器贡献特殊性为 0,0,0,1 Ø每个类.伪类或者属性选择器的特殊性为 0,0,1,0 Ø每个ID选择器的特殊性为 0,1,0, ...
- 在git bush中如何退出vim编辑器
写npm的pakege.json文件的files配置时,如果有不想包含的文件,那就要创建.npmignore文件排除,但windows系统又不允许创建以点开头命名的文件,咋办? 这时候就要用到linu ...
- 转载:mysql-Auto_increment值修改
转载网址:http://libo93122.blog.163.com/blog/static/1221893820125282158745/ | 2012-03-13 11:19:10 | 2012- ...
- 使用GCD的dispatch_once创建单例
使用GCD的dispatch_once创建单例 介绍了创建单例的方式,不过后来发现其实在ios 4.0后有更加简单的方式. 就是使用GCD的功能 代码如下: + (instantClass *)sha ...
- QT中窗口刷新事件的学习总结
一.主要理解一下几个方法和属性: 1.QWidget * QScrollView::viewport () const 2.void QWidget::paintEvent ( QPaintEvent ...
- leetcode_question_119 Pascal's Triangle II
Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3, Return [1,3 ...
- 批量更新sql |批量update sql
图所示现需要批量更新table2表内字段Pwd更新userName对IP地址username与Ip对应关系table1所示 update table2 set pwd=table1.ip from t ...
- 今天弄了整整一天DCloud
开发一个新闻移动客户端 起先用appcan.apiCloud,最后选择了DCloud: MUI文档看了n久,js代码一上来不很适应编码风格,一堆括号弄得头大: 数据库由爬虫程序将新闻页面数据爬出来: ...
- NetAnalyzer笔记 之 三. 用C++做一个抓包程序
[创建时间:2015-08-27 22:15:17] NetAnalyzer下载地址 经过前两篇的瞎扯,你是不是已经厌倦了呢,那么这篇让我们来点有意思的吧,什么,用C#.不,这篇我们先来C++的 Wi ...