一、简介:
Hibernate Synchronizer是一个基于Hibernate框架的免费Eclipse代码生成工具插件,可以根据
Hibernate映射文件的变化自动同步生成Java代码。自动生成的Java对象包括抽象的基类和用户可修
改的扩展类,这样在代码在自动同步时,不会影响到用户已经修改的代码。
自动生成的对象包括:
Value Objects
Proxy Interfaces
Composite Key Objects
Enumeration Objects
Component Objects
Subclasses
DAOs
其他的特性包括:
具有代码提示功能和大纲视图的编辑器
可自定义的模板
可根据数据库新建Hibernate映射文件的向导
新建配置文件向导
添加映射引用、同步文件、激活代码生成等右键菜单操作
在Eclipse中修改Hibernate映射文件后,Hibernate Synchronizer会重写Business Objects
代码,你也可以在Eclipse外部使用其他编辑器修改影射文件,然后手动运行同步操作。
在Hibernate Synchronizer重新生成Java对象时,不会删除你编写的代码,这是因为Hibernate
Synchronizer生成的所有对象都是抽象的基类(自动生成的代码),而不会修改扩展类(你编写的
代码)。
二、运行环境:
Windows 2000 Professional
JDK 1.4.2_03
Eclipse 3.1M6
Hibernate 2.1.8
Hibernate Extensions 2.1.3
Hibernate Synchronizer 2.3.1
MySQL 4.1.10a-nt
三、下载与安装:
1、从
http://java.sun.com 下载J2SDK,当前1.4.x系列的最新版本为1.4.2_08
2、从
http://www.eclipse.org 下载Eclipse,当前最新版本为3.1正式版,要下载M6版,
Hibernate Synchronizer的最新版本2.3.1和Eclipse3.1正式版冲突
3、从
http://www.hibernate.org/ 下载Hibernate和Hibernate Extensions,Hibernate
目前分为2.x和3.x两个系列,最新版本分别为2.1.8和3.0.5。Hibernate Extensions当前最新
版本为2.1.3
4、从
http://www.mysql.com 下载MySQL数据库,4.x系列的最新版本是4.1.12a
5、MySQL、JDK、Eclipse的安装请参考相关资料
6、安装Hibernate Synchronizer:
在Eclipse3.1中,Help->Software Updates->Find and Install…
在对话框Install/Update中,选择Searche for new features to install,
点击Next,点击“New Remote Site…”按钮,在New Update Site对话框中的Name输入
Hibernate Synchronizer update site,在URL中输入
http://www.binamics.com/hibernatesync ,
点击OK,确认Hibernate Synchronizer update site被选中,点击Finish
在完成Searching之后,点击选中Hibernate Synchronizer update site前面的复选
框,点击Next,选中I accept …,点击Next,点击Finish,在下载完成后,重起Eclipse
即安装成功
四、新建项目
1、在Eclipse中新建一个Java项目HibernateSyncTest,源代码目录修改为为src,输出
目录修改为为classes,在项目文件夹中新建lib目录
2、将下载的hibernate-2.1.8.zip压缩包中的lib目录下
所有jar文件解压缩到lib目录中,将压缩包中的hibernate2.jar解压缩到lib目录中
3、将下载的hibernate-extensions-2.1.3.zip压缩包中的lib目录下面的所有jar解压缩
到lib目录中,将压缩包中的hibernate-tools.jar解压缩到lib目录中
4、复制数据库驱动程序到lib目录中,如MySQL的数据库驱动mysql-connector-java-3.1.8-bin.jar
5、将lib目录下的所有jar文件添加到Build Path中
6、在src目录下新建Log4j的配置文件log4j.properties,请参考相关资料。
五、新建数据库
1、执行下面的SQL脚本,建立数据库:
CREATE DATABASE hibernate_test;
2、执行下面的SQL脚本,建立数据库表:
CREATE TABLE `person` (
`id` int(8) NOT NULL auto_increment,
`firstName` varchar(20) default NULL,
`lastName` varchar(20) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `person` values (1,’Vinton’,'Lee’);
六、实战Hibernate Synchronizer
1、创建Hibernate配置文件:
在Eclipse中执行如下操作:File->New->Other->Hibernate->Configuration File,
进入新建Hibernate配置文件向导
在Hibernate Configuration File对话框中,进行如下修改:
Container=/HibernateSyncTest/src
Database Type=MySQL
Driver=com.mysql.jdbc.Driver
Database URL=jdbc:mysql://localhost/hibernate_test
Username=yourusername
Password=yourpassword
其余项使用默认值,不需修改。点击Finish。
打开src,可以看到已经生成hibernate.cfg.xml
2、创建Hibernate映射文件:
在Eclipse中执行如下操作:File->-New->Other->Hibernate->Mapping File
可以看到已经在hibernate.cfg.xml中配置的数据库连接信息,输入密码后,点击Refresh
,如果配置正确,可以看到之前新建的数据库表person,选中person,修改Container,如:
/HibernateSyncTest/srcmoonsky/hibernate/model
指定Pachage,如moonsky.hibernate.model,点击Finish。
打开src,可以看到在包moonsky.hibernate.model已经生成了Person.hmb.xml,而且有
一个警告,警告的内容是You should synchronize this file after viewing the
contents.做得太好了,Perfect。
3、(此步骤不需要做)添加映射文件应用到配置文件中:
右击Person.hmb.xml,Hibernate Synchronizer->Add Mapping Reference,将映射文件
引用添加到配置文件中。
4、同步生成Java文件:
右击Person.hmb.xml,Hibernate Synchronizer->Synchronize Files,同步文件,完成
后,可以看到在生成了下面一些类:
moonsky.hibernate.model.Person
moonsky.hibernate.model.base._BaseRootDAO
moonsky.hibernate.model.base.BasePerson
moonsky.hibernate.model.base.BasePersonDAO
moonsky.hibernate.model.dao._RootDAO
moonsky.hibernate.model.dao.PersonDAO
5、写测试代码:
package test.moonsky.hibernate;
import java.util.List;
import net.sf.hibernate.HibernateException;
import moonsky.hibernate.model.dao.PersonDAO;
import moonsky.hibernate.model.dao._RootDAO;
import junit.framework.TestCase;
public class PersonTest extends TestCase {
PersonDAO dao = null;
protected void setUp() throws Exception {
super.setUp();
//load the configuration file
_RootDAO.initialize();
dao = new PersonDAO();
}
public void testFindAll() {
List people = null;
// find all person
try {
people = dao.findAll();
} catch (HibernateException e) {
e.printStackTrace();
}
&n
bsp;assertNotNull(people);
}
protected void tearDown() throws Exception {
super.tearDown();
}
}
运行测试代码,解决出现的问题,直到看到JUnit测试成功。
注:生成的hibernate.cfg.xml中的hibernate.transaction.factory_class为
net.sf.hibernate.transaction.JTATransactionFactory,在save()操作时出错,找不到
JNDI,错误原因还在查找,如果修改为net.sf.hibernate.transaction.JDBCTransactionFactory,
可以解决这个问题。需要考虑一下Hibernate Synchronizer为什么默认使用
JTATransactionFactory呢?
附:参考资料
Hibernate Synchronizer官方网站:
http://www.binamics.com/hibernatesync
Hibernate官方网站:
http://www.hibernate.org