作者:ssslinppp
1. 摘要
版本:
Spring4.0.4;Hibernate4.3.5;struts2.3.16;
主要介绍了如下内容:
- 项目结构的规划;
- Spring下整合Hibernate的具体过程;
- 整合struts的过程;
- 重点介绍Dao层的设计;
2. 项目结构
lib文件:
3. web.xml
因为需要整合struts和Hibernate,所以需要配置spring监听器、以及struts分发器。
4. applicationContext.xml
主要完成了如下工作:
- 首先需要配置 数据源,这里使用C3P0数据源;
- 配置sessionFactory;
- 配置Hibernate事务管理器;
- 配置切入点、通告等;
5. struts.xml
struts.xml配置文件,没有多少要说明的,就是常规的。
6. Dao层设计
项目时分层设计结构,分为控制层、业务层、持久层(Dao)层、PO层(持久化对象),如下图:
在进行Dao层设计的时候,我们按照接口编程的原则,如下图所示:
dao层作为持久层,需要与数据库打交道,而所有的数据库操作基本都涉及增、删、改、查等相同的基本操作,而这些通用的操作主要包括:
- 根据ID加载实体;
- 保存实体;
- 更新实体;
- 删除实体;
- 根据ID删除实体;
- 获取所有实体;
- 获取实体总数;
- 等等等;
我们可以编写一个dao层基类来实现这些基本操作,然后让其他的dao层类来继承这个基类,这样就可以减少重复的工作量。
dao层基类的编写也采用按照接口编程的原则,这样我们就可以得到继承关系图,如下所示:
dao层基类接口:BaseDao.java
dao层基类实现类:BaseDaoHibernate4.java
说明:程序中有两个实现类,分别对应Hibernate3和Hibernate4的,我们推荐使用Hibernate4的实现类。
Hibernate配置时,需要配置sessionFactory,这个sessionFactory实际上就是对应数据库,我们可以通过sessionFactory获取对应的session(相当于数据库连接),然后通过session对数据库进行访问,因此,如果我们想对数据库进行操作,就需要获取sessionFactory,而这个sessionFactory的获取我们采用spring的依赖注入方式,只需要在实现类中配置这个sessionFactory属性即可。
* 1. Spring推荐使用sessionFactory的getCurrentSession()来获取Session,
* 然后通过Session进行持久化操作。 ==> BaseDaoHibernate4.java
*
* 2. Spring并不推荐使用HibernateTemplate、HibernateDaoSupport来实现Dao组件,
* Spring4为了和以前编码风格兼容,才提供了HibernateTemplate、HibernateDaoSupport;
* ==>==> BaseDaoHibernate3.java
上面介绍的是Hibernate4推荐使用的方式,当然,我们也可以使用HibernateTemplete和HibernateDaoSupport来实现这个基类,这种方式主要是Hibernate3使用的方式,现在不推荐。
HibernateTemplete是spring提供的模板,这里面封装好了基本的数据库操作方法。
HibernateDaoSupport提供了两个方法:
- getHibernateTemplate():获取HibernateTemplate,通过HibernateTemplate来实现数据库操作;
- setSessionFactory():使用spring的依赖注入;
BaseDaoHibernate3.java
6.2 dao层具体类的实现
这是BookDao的接口和实现类;
我们需要让BookDao继承BaseDao,让BookDaoHibernate4类继承BaseDaoHibernate4;如下图所示:
接口:BookDao.java
实现类:BookDaoHibernate4.java
对应的spring配置==>依赖注入:sessionFactory;
BookDaoHibernate4继承了BaseDaoHibernate4,而BaseDaoHibernate4有SessionFactory属性;
7. 持久层类的编写
Book.java:为持久层类,与数据表相对应;
因为我们在spring的配置文件中配置了:
而Book类又添加了注解:
所以,spring容器会自动将book类看作是持久化类;
与此同时,我们还在spring配置文件中配置了:hibernate.hbm2ddl.auto=update
所以当我们第一次运行程序,执行数据库操作时,会在数据库中自动生成数据表:
8. 控制层和业务层
控制层:BookAction.java
bookService 采用依赖注入的方式:
业务层:
接口:BookService.java
实现类:BookServiceImpl.java
9. 前台界面
listBooks.jsp
10.运行
网址:http://localhost:8080/SpringStrutsHibernate/bookForm