轻松快速建立Spring + Hibernate工程

从2006年起,我便在一家小软件公司打工。由于员工数量少,所以基本上每个人都是身兼多职,这是我当时安心在小公司工作的一个重要理由,这样的工作模式让我学习到了很多东西,从网络到数据库,从系统调试到服务器维护,从JEE到PHP, 从JAVA GUI 到Workflow,在最近的这一年时间里,这些东西都需要由我来负责,确实对我在JAVA领域的学习促进很大。在公司参与的工程基本上都是网络应用程序类的,其中有用iBatis的,有OJB的,有Hibernate的,着实使用了好些个框架。这里我想和大家分享一下快速建立Spring + Hibernate的方法,谈谈我的开发习惯,大家一起讨论,共勉。

 

在开发JEE程序的时候,想必提及最多的就是MVC结构,这是大家在大学里学到的程序开发的基本规则。在我的开发中,我习惯将Model和Control这两个东西放在一起,界面单独处理。这里我主要想说的也就是这两层。

 

我想事先说明的是我将使用Hibernate Annotation,而不是传统的XML Mapping。题目是“轻松快速”,那么就要找最快捷的方法。我刚刚使用Hibernate Annotation没多久,但深切的体会其中的方便,现在已经不愿意再回到XML时代了。

 

闲话就不说了,进入实例吧。在实例中,我将不使用MyEclipse之类的工具,这样能够更清楚的描述每一个步骤。

 

表:Categoty, Product, Order, Customer

它们之间的关系应该是这样:

 

Category单- Product多

Product多 - Order多

Customer单 - Order多

 

这个工程起名叫做 PurchaseLine吧。下面开始建立这个工程,我使用Maven2。按照个人的习惯,有的人愿意用Ant,有的人愿意用Maven,各擅胜场,Maven可能没有Ant灵活,但是要比Ant快多了。下载一个Maven2,安装好之后,进入eclipse的workspace路径下,执行以下命令:

 

$ mvn archetype:create -DgroupId=com.purchaseline -DartifactId=PurchaseLine-Server

 

这是用maven2建立工程的最简单的方法。下面用Eclipse打开这个建立好的工程。在这之前,我们需要用maven把这个工程转化成Eclipse的格式,建立所有的classpath和project properties之类的东西。执行下面的命令:

 

$ cd PurchaseLine-Server

$ mvn eclipse:eclipse

 

打开Eclipse,点取:File -> Import,然后是General -> Existing Project Into Workspace,找到刚刚建立的PurchaseLine-Server,把这个工程输入到Eclipse里。

 

工程打开之后,可以看到maven已经为我们建立了一个文件结构,如图:

 

Project File Struction


可以看到maven自动建立了一个正常的java路径和一个JUnit的测试路径,程序将会在src/main/java里。打开pom.xml这个文件,我们需要对其进行修改,添加hibernate和Spring的文件包。修改后的文件如下:

 

在这个文件里,我添加了一些plugin和repository,没什么特别的地方,其中 fatjar-maven-plugin 这个外挂是生成fat-jar的,就是把所有引用的库文件都一起打包。这样最后声称的JAR就可以在任何地方使用而不用担心缺失支持的文件包了。pom.xml改好了以后,再执行一次


$ mvn eclipse:eclipse

 

maven会下载这些文件包,然后把它们添加到classpath里。一直到现在都说的是题外话,跟hibernate和spring还一点关系没有呢。得了,还是直接进入正题吧。

 

按照我的习惯,先建立Java Bean。根据前面已经分析好的数据结构关系,建立实体类,注意其中的Annotation,这是Hibernate赖以生存的保障。

 

Category.java

 

Customer.java

 

Order.java

 

Product.java

 

JAVA Bean建好了。这里就不过多赘述Annotation的用法,如果有兴趣了解的话,上网看看Hibernate Annotation的官方资料就明白了。

 

虽然建好了实体类,但系统还是散乱的,这些类之间的连接并不明了。下面就建立基本的Hibernate和Spring配置文件和一些测试文件,可以让我们随时测试建立好的东西,及时发现错误。

 

建立 src/main/resources 文件夹,在里面建立文件:

 

log4j.properties

 

hibernate.cfg.xml

 

applicationContext.xml

 

 

注意到在applicationContext.xml文件里的数据库名称和用户名密码,这里是用MySQL,所以需要进入MySQL先建立一个名字为 purchase_line的数据库。

 

下面建立一个系统初始化的类。这个类会初始化并且得到applicationContext,最终会是一个得到所有DAO的类。因为我们现在想作测试,所以只要先初始化applicationContext就可以了。

 

 

留意一下这些文件所属的package,这样的格局并非必须,但是为了使整个工程简单易读,最好遵循自己习惯的文件结构。

 

下面就可以开始测试了。建立一个带main的测试类,这里我建了一个PLTest.java

 

 

这个类里面目前什么都没有,只是初始化一下applicationContext,看看hibernate和spring的设置是否正确。

 

运行这个测试以后,系统应该在purchase_line这个数据库里建立5个表格,如下图:

Database

 

可以发现pl_product_order这个表,这是Hibernate自动建立的,用以连接order和product的多对多关系。

 

如果这些表成功建立,那说明hibernate和spring的设置都没有错。下面我们进行DAO的设置。Hibernate提供了一个泛的DAO,这个非常好用,灵活的使用能把工作减少到最低。下面我们建立DAO。

 

GenericDAO.java

 

既然有了接口,那就要有实体类来执行这个接口。下面就建立一个GenericDAOImpl的实体类。

 

GenericDAOImpl.java

 

这两个东西就像它们名字一样,是两个基本接口和类,接下来我们建立的所有DAO都要继承它们。

 

CategoryDAO.java

 

CustomerDAO.java


 

OrderDAO.java

 

ProductDAO.java

 

在我们建立这些DAO的时候,里面并没有定义任何功能,除了CustomerDAO,这就是继承GenericDAO美妙的地方,所有的基本功能,像findById, findAll, 和makePersistence, delete之类的方法已经在GenericDAO里定义了,大大减少了代码的重复。当然,如果你有特定的功能需要实现,当然需要在DAO里特殊定义出来,就像在CustomerDAO里的一样。

 

下面执行这些借口:

 

CategoryDAOImpl.java

 

CustomerDAOImpl.java

 

OrderDAOImpl.java

 

ProductDAOImpl.java

 

 

下面在Spring里定义这些DAO,最后的applicationContext.xml是这样的:

 

 

到这里基本上就全部搞定了,但是我们并不想每次调用DAO的时候都要初始化一下applicationContext,记得前面我们有一个PurchaseLineServerInit的这么一个类,现在正是用它的时候了,非常简单的就能从Spring里得到这些DAO:

 

PurchaseLineServerInit.java

 

完成了。下面测试一下。前面我们已经有一个测试文件了,在里面添加些东西就可以:

 

 

运行之后应该在pl_category这个表里添加新记录。

 

下面是整个工程的文件结构:

 

Overall File Structure

 

到这里,整个过程就已经完成了。在我的开发过程中,我一般是把这个工程打包到一个JAR里,然后在任何我想使用的地方调用。这样好处是MVC层之间完全分离,让你更加专注的去应对当前需要工作的地方。另外,比如说用Netbeans开发JSF的时候,Netbeans做JSF倒是方便,可是编辑的速度功能上面我觉得都不如Eclipse,所以我把数据的部分拿到Eclipse里去做,只有必须要用到Netbeans的时候我才使用它,大大提高了效率。

 

这只是我在工作中的经验和心得,写出来和大家分享,希望对刚刚接触Spring和Hibernate的朋友有所帮助,也希望各位高手,老鸟多多指点,大家互相帮助,共同进步。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值