`

Hibernate自动生成工具实例

阅读更多
作为一个优秀的持久层框架实现,Hibernate拥有比较完善的工具集,用于辅助Hibernate开发。
这些工具可以有效减少生成Hibernate基础代码和重构代码产生的重复劳动,从这些重复劳动中解脱出来,得以集中精力考虑系统架构和业务功能。
Hibernate工具主要以代码生成工具为主,比较有名的是Hibernate自带的hibernate-extensions,middlegen,Hibernate-Doclet和Hibernate Syschronizer
Hibernate基础代码包括POJO类,hbm映射文件,数据库定义。
通过Hibernate对JDBC的封装,Hibernate自动把对Object转化为对数据库的操作,持久层开发时所需要的代码数量已经大大减少。
两种持久层的建模方式:E-R建模和面向对象建模,无论两种方式在理念上有什么差异,使用Hibernate工具时,唯一的区别在于开发时工具使用顺序。

需要准备的开发环境:
开发工具:MyEclipse6.0.0 GA
数据库:Mysql5.0
JDBC库:mysql-connector-java-5.0.3-bin.jar
Hibernate:hibernate3.2

开发步骤:
1.Eclipse中新建Java项目hibernatetools,把需要的jar包拷贝到lib目录下,目录结构如下:

需要的库文件包括:Hibernate3.2核心jar包,log4j,middlegen需要的jar包,mysql驱动,servletapi开发包,struts核心jar包,velocity开发包
xdoclet开发包,commons-collections开发包
2.MiddleGen是一个开源的以数据库作为驱动的源代码生成引擎,基于JDBC,Velocity,Ant,XDoclet等工具,可以生成多种持久化层解决方案的
源代码。MiddleGen引擎擅长通过已有的数据库表结构生成访问这些数据库表的持久层代码和访问数据库的界面层代码。
对于Hibernate,MiddleGen不会生成POJO,只能生成Hibernate映射文件。
3.MiddleGen自身不提供可执行的程序,只能通过Ant来调用,创建Ant的build.xml文件
<project name="HibernateTool" default="middlegen" basedir=".">
	<!--应用名称-->
	<property name="name" value="airline"/>
	<property name="lib.dir" value="${basedir}/lib"/>
	<property name="src.dir" value="${basedir}/src"/>
	<property name="middlegen.home" value="${basedir}/lib"/>
	<property name="build.dir" value="${basedir}/build"/>
	<!--输出目录-->
	<property name="build.gen-src.dir" value="${build.dir}/gen-src"/>
	<!--数据库配置信息-->
	<property name="database.script.file"           value="./sql/${name}-mysql.sql"/>
	<property name="database.driver.file"           value="${lib.dir}/mysql-connector-java-5.0.3-bin.jar"/> 
	<property name="database.driver.classpath"      value="${database.driver.file}"/>
	<property name="database.driver"                value="com.mysql.jdbc.Driver"/>
	<property name="database.url"                   value="jdbc:mysql://localhost:3306/airline"/>
	<property name="database.userid"                value="root"/>
	<property name="database.password"              value="1234"/>
	<property name="database.schema"                value=""/>
	<property name="database.catalog"               value=""/>
	<property name="jboss.datasource.mapping"       value="mySQL"/>	
	
	<!-- 配置需要的库文件的classpath-->
	<path id="lib.class.path">
      <!-- The middlegen jars -->
		<fileset dir="${middlegen.home}">
			<include name="*.jar"/>
		</fileset>
    </path>
	<!-- 执行middlegen任务 -->
	<!-- middlegen任务完成对数据库连接和其他属性的设置 -->
	<!-- middlegen的Hibernate子任务完成根据得到的数据库定义生成映射文件 -->
	<target name="middlegen" description="Run middlegen" >
		<taskdef 
			name="middlegen" classname="middlegen.MiddlegenTask"
			classpathref="lib.class.path" 
		/> 
<!--
	gui属性:
		设置为true,那么在代码生成之前会跳出一个界面让你来配置数据库字段和生成文件之间的对应关系
-->
	    <middlegen
			 appname="${name}"
			 prefsdir="${src.dir}"
			 gui="true"
	    	 xmlprefs="true"
			 databaseurl="${database.url}"
			 driver="${database.driver}"
			 username="${database.userid}"
			 password="${database.password}"
			 schema="${database.schema}"
			 catalog="${database.catalog}"
	    >	
			<hibernate 
				destination="${build.gen-src.dir}"
		        package="com.pccw.test.dao"
		        genXDocletTags="true"
		        javaTypeMapper="middlegen.plugins.hibernate.HibernateJavaTypeMapper"
			/>
		</middlegen>
	</target>
</project>



4.使用middlegen2.1中自带的例子中的数据库airline来做说明,数据库脚本代码:
--创建airline数据库
CREATE DATABASE airline;

DROP TABLE IF EXISTS reservations;
DROP TABLE IF EXISTS flights;
DROP TABLE IF EXISTS persons;

--创建人员表,记录乘客信息
CREATE TABLE persons(
 person_id INT NOT NULL,			--人员id
 first_name VARCHAR(32) NOT NULL,	--名
 last_name VARCHAR(32) NOT NULL,	--姓
 PRIMARY KEY( person_id )			--设置主键
) TYPE=INNODB;

--创建航班表,记录航班信息
CREATE TABLE flights(
 flight_id INT NOT NULL,			--航班id
 name VARCHAR(32) NOT NULL,			--航班名称
 departure_utc DATETIME NOT NULL,	--出发时间
 arrival_utc DATETIME NOT NULL,		--抵达时间
 PRIMARY KEY( flight_id )			--设置主键
) TYPE=INNODB;

--创建预约航班表
CREATE TABLE reservations(
 reservation_id INT NOT NULL,
 person_id_fk INT NOT NULL,
 flight_id_fk INT NOT NULL,
 registration_utc DATETIME NOT NULL,
 comment TEXT,
 PRIMARY KEY(reservation_id,person_id_fk,flight_id_fk),
 INDEX person_ind(person_id_fk),	--索引
 INDEX flight_ind(flight_id_fk),	--索引
 FOREIGN KEY (person_id_fk) REFERENCES persons(person_id),	--外键关联人员表
 FOREIGN KEY (flight_id_fk) REFERENCES flights(flight_id)	--外键关联航班表
) TYPE=INNODB;

INSERT INTO persons VALUES(1,'yong','fan');
INSERT INTO persons VALUES(2,'qing','yang');
INSERT INTO persons VALUES(3,'xingwu','gao');

5.开始运行middlegen任务,启动middlegen。middlegen有两种启动模式,通过设置gui(true,false)来控制。
一种是图形界面,在图形界面中可以修改生成代码所需要的属性,然后生成代码;
另一种不进行任何配置直接生成对应的代码。这里采用图形界面模式来启动,打开build.xml文件,单击右键执行Ant Build命令:
[img]http://fantasyyong.iteye.com/upload/picture/pic/6438/2c830c58-4c81-4995-85aa-386b828bb9a4.jpg [/img]
分享到:
评论

相关推荐

    Hibernate实践例子程序

    2. Hibernate Extention,用来自动生成与那些*.hbm.xml对应的POJO,也就是根据那些对象关系映射的配置文件生成相应的class文件。 HibernateEx里面有一个hbm2java工具,就是用来根据些配置文件生成相应的POJO class。...

    Hibernate3实例

    Hibernate3实战in MyEclipse。本实例是一个最典型的实体“雇员”完整的持久化操作。借助MyEclipse工具自动生成配置文件、持久化类、映射文件和与业务逻辑之间的中间层DAO类。

    Hibernate+中文文档

    20.1. Schema自动生成(Automatic schema generation) 20.1.1. 对schema定制化(Customizing the schema) 20.1.2. 运行该工具 20.1.3. 属性(Properties) 20.1.4. 使用Ant(Using Ant) 20.1.5. 对schema的增量...

    JAVA代码生成工具

    生成器模板路径可以引用相关变量 如 ${basepackage}/${className}.java,根据该变量生成输出文件 二. 自动搜索某个目录所有模板文件,无需配置 三.代码生成器模板可以引用的相关变量 1. g.generateByTable(...

    hibernate3.2中文文档(chm格式)

    20.1. Schema自动生成(Automatic schema generation) 20.1.1. 对schema定制化(Customizing the schema) 20.1.2. 运行该工具 20.1.3. 属性(Properties) 20.1.4. 使用Ant(Using Ant) 20.1.5. 对schema的增量...

    HibernateAPI中文版.chm

    20.1. Schema自动生成(Automatic schema generation) 20.1.1. 对schema定制化(Customizing the schema) 20.1.2. 运行该工具 20.1.3. 属性(Properties) 20.1.4. 使用Ant(Using Ant) 20.1.5. 对schema的增量...

    精通hibernate:对象持久化技术孙卫琴第二版part2

    本章主要介绍关系数据库中的代理主键(不具有业务含义),接着介绍Hibernate提供的几种内置标识符生成器的用法及适用范围。 6.1 关系数据库按主键区分不同的记录 123 6.1.1 把主键定义为自动增长标识符类型 123 ...

    Hibernate注解

    * GenerationType.IDENTITY 主键由数据库自动生成(主要是自动增长类型) * GenerationType.SEQUENCE 根据底层数据库的序列来生成主键,条件是数据库支持序列。(这个值要与generator一起使用) * generator 指定...

    hibernate 教程

    基于Velocity的渲染器/生成器(Velocity based renderer/generator) 15.3. 映射文件生成器(Mapping File Generation) 15.3.1. 运行此工具 16. 示例:父子关系(Parent Child Relationships) 16.1. 关于...

    Hibernate中文详细学习文档

    20.1. Schema自动生成(Automatic schema generation) 20.1.1. 对schema定制化(Customizing the schema) 20.1.2. 运行该工具 20.1.3. 属性(Properties) 20.1.4. 使用Ant(Using Ant) 20.1.5. 对schema的增量...

    Hibernate 中文 html 帮助文档

    20.1. Schema自动生成(Automatic schema generation) 20.1.1. 对schema定制化(Customizing the schema) 20.1.2. 运行该工具 20.1.3. 属性(Properties) 20.1.4. 使用Ant(Using Ant) 20.1.5. 对schema的增量更新...

    Hibernate教程

    21.1. Schema自动生成(Automatic schema generation) 21.1.1. 对schema定制化(Customizing the schema) 21.1.2. 运行该工具 21.1.3. 属性(Properties) 21.1.4. 使用Ant(Using Ant) 21.1.5. 对schema的增量...

    最全Hibernate 参考文档

    20.1. Schema自动生成(Automatic schema generation) 20.1.1. 对schema定制化(Customizing the schema) 20.1.2. 运行该工具 20.1.3. 属性(Properties) 20.1.4. 使用Ant(Using Ant) 20.1.5. 对schema的增量更新...

    hibernate 体系结构与配置 参考文档(html)

    触发器实现的主键生成器(Primary keys assigned by triggers) 5.1.5. composite-id 5.1.6. 鉴别器(discriminator) 5.1.7. 版本(version)(可选) 5.1.8. timestamp (可选) 5.1.9. property 5.1.10. 多对...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    20.1. Schema自动生成(Automatic schema generation) 20.1.1. 对schema定制化(Customizing the schema) 20.1.2. 运行该工具 20.1.3. 属性(Properties) 20.1.4. 使用Ant(Using Ant) 20.1.5. 对schema的增量...

    Hibernate实战(第2版 中文高清版)

    第一部分 从Hibernate和EJB 3.0开始  第1章 理解对象/关系持久化   1.1 什么是持久化   1.1.1 关系数据库   1.1.2 理解SQL   1.1.3 在Java中使用SQL   1.1.4 面向对象应用程序中的持久化   1.2 范式不...

    好用的代码生成源码

    rapid-framework是一个以spring为核心的项目脚手架(或者称为胶水框架),框架将各个零散的框架(struts,strust2,springmvc,hibernate,ibatis,spring_jdbc,flex)搭建好,并内置一个代码生成器,辅助项目开发,可以生成...

    精通Hibernate:对象持久化技术第二版part3

    本章主要介绍关系数据库中的代理主键(不具有业务含义),接着介绍Hibernate提供的几种内置标识符生成器的用法及适用范围。 6.1 关系数据库按主键区分不同的记录 123 6.1.1 把主键定义为自动增长标识符类型 123 ...

Global site tag (gtag.js) - Google Analytics