0
点赞
收藏
分享

微信扫一扫

【Spring实战-3】Spring整合Hibernate、Struts

作者:ssslinppp     

1. 摘要

版本:

Spring4.0.4;Hibernate4.3.5;struts2.3.16;

主要介绍了如下内容:

  1. 项目结构的规划;
  2. Spring下整合Hibernate的具体过程;
  3. 整合struts的过程;
  4. 重点介绍Dao层的设计;

2. 项目结构

【Spring实战-3】Spring整合Hibernate、Struts_SSH【Spring实战-3】Spring整合Hibernate、Struts_SSH_02

lib文件:

【Spring实战-3】Spring整合Hibernate、Struts_Hibernate_03【Spring实战-3】Spring整合Hibernate、Struts_SSH_04




3. web.xml

因为需要整合struts和Hibernate,所以需要配置spring监听器、以及struts分发器。

【Spring实战-3】Spring整合Hibernate、Struts_SSH_05




4. applicationContext.xml

主要完成了如下工作:

  1. 首先需要配置 数据源,这里使用C3P0数据源;
  2. 配置sessionFactory;
  3. 配置Hibernate事务管理器;
  4. 配置切入点、通告等;


【Spring实战-3】Spring整合Hibernate、Struts_spring_06

【Spring实战-3】Spring整合Hibernate、Struts_SSH_07

【Spring实战-3】Spring整合Hibernate、Struts_SSH_08【Spring实战-3】Spring整合Hibernate、Struts_spring_09【Spring实战-3】Spring整合Hibernate、Struts_SSH_10【Spring实战-3】Spring整合Hibernate、Struts_spring_11【Spring实战-3】Spring整合Hibernate、Struts_spring_12



5. struts.xml


struts.xml配置文件,没有多少要说明的,就是常规的。

【Spring实战-3】Spring整合Hibernate、Struts_spring_13【Spring实战-3】Spring整合Hibernate、Struts_spring整合Hibernate_14


6. Dao层设计

项目时分层设计结构,分为控制层、业务层、持久层(Dao)层、PO层(持久化对象),如下图:


【Spring实战-3】Spring整合Hibernate、Struts_Hibernate_15


在进行Dao层设计的时候,我们按照接口编程的原则,如下图所示:

【Spring实战-3】Spring整合Hibernate、Struts_Hibernate_16

dao层作为持久层,需要与数据库打交道,而所有的数据库操作基本都涉及增、删、改、查等相同的基本操作,而这些通用的操作主要包括:

  1. 根据ID加载实体;
  2. 保存实体;
  3. 更新实体;
  4. 删除实体;
  5. 根据ID删除实体;
  6. 获取所有实体;
  7. 获取实体总数;
  8. 等等等;

我们可以编写一个dao层基类来实现这些基本操作,然后让其他的dao层类来继承这个基类,这样就可以减少重复的工作量。

dao层基类的编写也采用按照接口编程的原则,这样我们就可以得到继承关系图,如下所示:


【Spring实战-3】Spring整合Hibernate、Struts_spring整合Hibernate_17

dao层基类接口:BaseDao.java

【Spring实战-3】Spring整合Hibernate、Struts_SSH_18

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  

【Spring实战-3】Spring整合Hibernate、Struts_spring整合Hibernate_19【Spring实战-3】Spring整合Hibernate、Struts_spring整合Hibernate_20【Spring实战-3】Spring整合Hibernate、Struts_spring整合Hibernate_21【Spring实战-3】Spring整合Hibernate、Struts_spring_22【Spring实战-3】Spring整合Hibernate、Struts_Hibernate_23【Spring实战-3】Spring整合Hibernate、Struts_Hibernate_24【Spring实战-3】Spring整合Hibernate、Struts_spring整合Hibernate_25【Spring实战-3】Spring整合Hibernate、Struts_spring_26



上面介绍的是Hibernate4推荐使用的方式,当然,我们也可以使用HibernateTemplete和HibernateDaoSupport来实现这个基类,这种方式主要是Hibernate3使用的方式,现在不推荐。

HibernateTemplete是spring提供的模板,这里面封装好了基本的数据库操作方法。


HibernateDaoSupport提供了两个方法:


  1. getHibernateTemplate():获取HibernateTemplate,通过HibernateTemplate来实现数据库操作;
  2. setSessionFactory():使用spring的依赖注入;

BaseDaoHibernate3.java


【Spring实战-3】Spring整合Hibernate、Struts_Hibernate_27【Spring实战-3】Spring整合Hibernate、Struts_spring_28【Spring实战-3】Spring整合Hibernate、Struts_SSH_29【Spring实战-3】Spring整合Hibernate、Struts_SSH_30

【Spring实战-3】Spring整合Hibernate、Struts_SSH_31【Spring实战-3】Spring整合Hibernate、Struts_spring_32【Spring实战-3】Spring整合Hibernate、Struts_Hibernate_33


6.2 dao层具体类的实现

这是BookDao的接口和实现类;

【Spring实战-3】Spring整合Hibernate、Struts_Hibernate_34


我们需要让BookDao继承BaseDao,让BookDaoHibernate4类继承BaseDaoHibernate4;如下图所示:

【Spring实战-3】Spring整合Hibernate、Struts_spring整合Hibernate_17


接口:BookDao.java


【Spring实战-3】Spring整合Hibernate、Struts_spring_36

实现类:BookDaoHibernate4.java

【Spring实战-3】Spring整合Hibernate、Struts_Hibernate_37

对应的spring配置==>依赖注入:sessionFactory;

【Spring实战-3】Spring整合Hibernate、Struts_Hibernate_38


BookDaoHibernate4继承了BaseDaoHibernate4,而BaseDaoHibernate4有SessionFactory属性;



7. 持久层类的编写


Book.java:为持久层类,与数据表相对应;

【Spring实战-3】Spring整合Hibernate、Struts_SSH_39

因为我们在spring的配置文件中配置了:

【Spring实战-3】Spring整合Hibernate、Struts_spring_40

而Book类又添加了注解:

【Spring实战-3】Spring整合Hibernate、Struts_spring_41


所以,spring容器会自动将book类看作是持久化类;

与此同时,我们还在spring配置文件中配置了:hibernate.hbm2ddl.auto=update

【Spring实战-3】Spring整合Hibernate、Struts_spring_42

所以当我们第一次运行程序,执行数据库操作时,会在数据库中自动生成数据表:

【Spring实战-3】Spring整合Hibernate、Struts_spring整合Hibernate_43





8. 控制层和业务层

控制层:BookAction.java

【Spring实战-3】Spring整合Hibernate、Struts_SSH_44【Spring实战-3】Spring整合Hibernate、Struts_spring_45【Spring实战-3】Spring整合Hibernate、Struts_SSH_46

bookService 采用依赖注入的方式:

【Spring实战-3】Spring整合Hibernate、Struts_SSH_47 



业务层:

接口:BookService.java

【Spring实战-3】Spring整合Hibernate、Struts_Hibernate_48


实现类:BookServiceImpl.java

【Spring实战-3】Spring整合Hibernate、Struts_Hibernate_49



9. 前台界面

【Spring实战-3】Spring整合Hibernate、Struts_SSH_50

listBooks.jsp

【Spring实战-3】Spring整合Hibernate、Struts_Hibernate_51


10.运行

网址:​​​http://localhost:8080/SpringStrutsHibernate/bookForm 

【Spring实战-3】Spring整合Hibernate、Struts_spring_52

【Spring实战-3】Spring整合Hibernate、Struts_SSH_53


【Spring实战-3】Spring整合Hibernate、Struts_Hibernate_54





举报

相关推荐

0 条评论