作为一个优秀的持久层框架实现,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]