前一阵子帮别人有偿做本科毕设的XX管理系统,对方要求一定要Java,不然他没学过不利于答辩。想我们大软院从大一开始就在做XX管理系统了,大二大三只是学的内容不一样,但大作业的载体都是该死的XX管理系统。从原生Java Swing做的靠文件读写数据的XX管理系统,到下学期加入数据库读写的,再过一学期用jsp做网页版的XX管理系统,然后再用J2EE框架,或者换php再实现一个XX管理系统。最后熬到坑爹的研究生,第一学期云计算课程先用传统方式实现一个XX管理系统,然后再把数据迁移到云平台上做实验。好吧,我错了,不知不觉又习惯喷了
其实我想说的是要不是看在同学的份上,真不想做这个事情,还要求Java,真不想碰Swing的东西了,也不想烦人的Struts。有人要网页版,我就用更简单易学的Play Framework(我都用较早的1.2.7版本)。而还有人要窗口程序,不得以去查了查简单的办法。
准备
我用的是较早的eclipse 3.6.2 helios。对于Swing窗口程序的搭建,我使用了WindowBuilder插件,因为以前用过的VisualEditor貌似现在不维护了。
由于XX管理系统都涉及到增删改查操作,这种sql写起来就是纯粹苦力活。以前在MyEclipse中用过Struts + Hibernate(MyEclipse中均自带这些插件),但是苦于MyEclipse太大了,启动太慢,所以我想办法把Hibernate装到eclipse中。
Hibernate插件安装
- 打开eclipse -> Help -> Install New Software
- 添加 http://download.jboss.org/jbosstools/updates/stable/helios/
- 选择All JBoss Tools下的Hibernate Tools即可(因为Hibernate被JBoss收了,只需装这一个就行)
漫长的等待
注意,有可能安装出错,我试了两三次才好(叹气)
最后这个关于unsigned的Warning无视之,直接OK后就安装成功了^_^
Hibernate Config
HibernateTool安装完成后,可在eclipse中添加Hibernate perspective。
步骤1
将Hibernate核心jar包添加到project中,可到这里下载。
步骤2
在project的src根下添加名为hibernate.cfg.xml的文件,内容如下
1 |
|
步骤3
打开Hibernate perspective,在该区域中右击添加configuration
这里的Type我选择了Annotations的方式
OK后就能在刚才的区域中看到数据库中的表了
步骤4
点击菜单栏中的这个图标,打开”Hibernate Code Generation Configurations”,我们新建一个Configuration。
注意要把“Reverse engineer from JDBC Connection”选项打开,这是Hibernate的反向工程。从数据库的表映射成实体类和配置文件,当然也可以从配置文件映射成数据库的表。
这里的Exporters我就勾选了前两项,一个是table对应的实体类,另一个则是mapping配置。而其他的如.cfg.xml和DAO code我准备都手工操作。因为这个code generation每次生成时会把以前的覆盖掉。
步骤5
运行Hibernate code generation,就会生成数据库factory_manage下所有表的映射。
步骤6
mapping文件(.hbm.xml)大可用生成的,只需要注意的是一对多和多对一映射时是否要lazy fetch(默认为true)。
最后记得将mapping文件的路径添加到hibernate.cfg.xml中!
Hibernate Session Factory
创建一个hibernate的package,新建HibernateSessionFactory.java,内容如下。
1 | package hibernate; |
注:这段代码是我以前在MyEclipse中用Hibernate时自动生成的,这里我不知道怎么生成,所以就直接复制了过来。
同样,再新建一个HibernateSessionFactoryUtil.java,内容如下。
1 | package hibernate.util; |
DAO泛型编程
创建dao.interfaces的package,新建GenericDao.java,内容如下。
1 | package dao.interfaces; |
相应地,创建dao.hibernate的package,新建GenericDaoHibernate.java,内容如下。
1 | package dao.hibernate; |
有了GenericDao的基础,对于其他具体实体类,我们只需要定义一个它的接口类去继承GenericDao,像这样
public interface UserDao extends GenericDao<User, Integer>
在这里定义它的特有方法
对于接口的实现类,像这样
public class UserDaoHibernate extends GenericDaoHibernate<User, Integer> implements UserDao
因此有了泛型DAO,就不必为每个实体都写一套大同小异的最基础的增删改查操作了。
总结
在eclipse中集成HibernateTools后,可以先在数据库中建好table,然后通过Hibernate的Reverse Engineering映射成对应的实体类和配置文件。通过建立泛型DAO接口和实现类,不必为具体每个实体类编写诸如getById
的方法。Mapping和DAO泛型编程,大大减少了基于增删改查的XX管理系统的开发工作量。