Struts+Spring+Hibernate开发实例.docx

上传人:b****2 文档编号:1940770 上传时间:2023-05-02 格式:DOCX 页数:34 大小:228.36KB
下载 相关 举报
Struts+Spring+Hibernate开发实例.docx_第1页
第1页 / 共34页
Struts+Spring+Hibernate开发实例.docx_第2页
第2页 / 共34页
Struts+Spring+Hibernate开发实例.docx_第3页
第3页 / 共34页
Struts+Spring+Hibernate开发实例.docx_第4页
第4页 / 共34页
Struts+Spring+Hibernate开发实例.docx_第5页
第5页 / 共34页
Struts+Spring+Hibernate开发实例.docx_第6页
第6页 / 共34页
Struts+Spring+Hibernate开发实例.docx_第7页
第7页 / 共34页
Struts+Spring+Hibernate开发实例.docx_第8页
第8页 / 共34页
Struts+Spring+Hibernate开发实例.docx_第9页
第9页 / 共34页
Struts+Spring+Hibernate开发实例.docx_第10页
第10页 / 共34页
Struts+Spring+Hibernate开发实例.docx_第11页
第11页 / 共34页
Struts+Spring+Hibernate开发实例.docx_第12页
第12页 / 共34页
Struts+Spring+Hibernate开发实例.docx_第13页
第13页 / 共34页
Struts+Spring+Hibernate开发实例.docx_第14页
第14页 / 共34页
Struts+Spring+Hibernate开发实例.docx_第15页
第15页 / 共34页
Struts+Spring+Hibernate开发实例.docx_第16页
第16页 / 共34页
Struts+Spring+Hibernate开发实例.docx_第17页
第17页 / 共34页
Struts+Spring+Hibernate开发实例.docx_第18页
第18页 / 共34页
Struts+Spring+Hibernate开发实例.docx_第19页
第19页 / 共34页
Struts+Spring+Hibernate开发实例.docx_第20页
第20页 / 共34页
亲,该文档总共34页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Struts+Spring+Hibernate开发实例.docx

《Struts+Spring+Hibernate开发实例.docx》由会员分享,可在线阅读,更多相关《Struts+Spring+Hibernate开发实例.docx(34页珍藏版)》请在冰点文库上搜索。

Struts+Spring+Hibernate开发实例.docx

Struts+Spring+Hibernate开发实例

华虎设计站资料欢迎大家光临[张虎]

地址:

南昌航空大学科技学院7#406室

QQ:

632926059

Struts+Spring+Hibernate开发实例

一介绍

本文并不想介绍Struts,Spring,Hibernate的原理系统架构等,本文地目的是通过一个较复杂地实例介绍如何整合Struts,Spring,Hibernate,网上现有的例子虽然也能达到目的,但功能都比较单一,复杂的例子时会有意想不到的麻烦。

本文对读者假设已经具备了以上框架的基础知识。

以及那些已经了解Struts,Spring,Hibernate的基本概念,但是还没有亲身在较复杂的项目中体验Struts+Spring+Hibernate的开发人员。

1Struts

虽然不打算过多介绍Struts的原理,但是大概介绍一下还是有必要的。

Struts本身就是MVC在这里负责将用户数据传人业务层,以及将业务层处理的结果返回给用户,此系统属于较简单WEB应用,采用了OpenSessionInView模式处理LazyLoad问题,这样我们可以在用户视图中使用get,set方法来方便地获取关联对象。

为了处理庞大的Action和ActionForm问题,在此我门准备使用DynaActionForm(DynaValidatorForm)和DispatchAction以及动态验证框架来解决。

及使用Tile来解决框架问题。

使用自定义标签处理分页和身份验证问题。

2Spring

SpringFramework最得以出名的是与Hibernate的无缝链接,虽然Spring对Hibernate提供了90%以上的封装,使我们不必去关心Session的建立,关闭,以及事务使我们能够专心的关注业务逻辑。

但是一些特殊情况如有时需要Query以及Criteria对象,分页等,Spring不能给我们提供支持,总不能每次都在你的DAO上写个HibernateCallBackup()吧?

Spring的作用不是把Hibernate再封装一层,而是让你接触不到Hibernate的API,而是帮助你管理好Session和Transaction。

在这里解决方法是:

首先写一个IBase的接口,和一个BaseDao的实现。

在实现中仿照HibernateTemplate,将其功能一一实现,同时考虑到Spring未能支持的地方,我们不得已只好自己来管理Session,因此加入publicSessionopenSession(),publicQuerygetQuery(Stringsql),publicCriteriagetCriteria(Classclazz),以及分页的方法。

然后为每一个Entity都建立继承于以上类的IEntity,与EntityDao。

这里可以根据需求对Entity加入特殊的方法实现,如在StudentsDao.java中加入类似用户身份验证等。

以上就是数据访问层。

接下来在Service层中通过对dao的引用完成业务逻辑方法。

在下面的例子中我们分别为学生模块,教师模块,管理员模块构建Service层,StudentsServiceImpl,TeachersServiceImpl,AdminServiceImpl。

3Hibernate

有了Spring的封装,我们要对Hibernate做的就是正确实现对象关系的映射。

由于此处处于系统的最底层,准确无误的实现对象之间的关联关系映射将起着至关重要的作用。

总之,理解了Struts,Spring,Hibernate地原理以及之间的关系之后,剩下的工作就如同在以Spring为核心的Struts为表现的框架中堆积木。

下图可以更好的帮助我们理解Struts,Spring,Hibernate之间的关系。

二案例简述:

设计思路主要源于大学选修课,该系统可以方便处理学生在课程选报,学分查询,成绩查询,以及成绩发布等。

系统以班级为核心,一门课程可以对应多个班级,一名教师也可以带不同的班级,学生可以选报不同课程所对应的班级,班级自身有目前人数,和最大人数,以及上课时间,上课地点的属性。

学生在选报班级之后,班级的人数会自动加一,直到等于最大人数时,其他学生将会有人数已满的错误提示。

同理如果学生选择了同一课程的不同班级,也将收到错误提示。

学生有密码,系别,学分,地址,电话等属性。

教师在系统中主要负责成绩发布,教师可以对其所带的班级的学生的成绩修改,系统会以成绩是否大于等于60来判断学生是否通过考试,如果通过会将该课程的学分累加到学生学分,同样如果教师二次修改了成绩,而且小于60,系统会在学生学分上扣掉该课程的分数。

课程在系统中具体体现为班级,自身带有学分属性。

系有编号,名称的属性,同时可以作为联系教师,课程,学生的桥梁。

功能模块

●      身份验证模块:

根据用户名,密码,用户类别转发用户到不同的模块。

●      学生模块:

查看课程,查看班级,选报课程,查看己选课程,成绩查询。

●      教师模块:

录入成绩

●      管理员模块:

对学生,教师,课程,班级,系增,删,查,改。

三具体实践

代码下载

1对象关系映射:

首先,将库表映射为数据模型(SQL在源码中查看),转换后的数据模型如下图:

由此我们可以看出一下关联关系:

1Students和Contact(联系方式)一对一关系。

2Students和History(选课历史)一对多关系

3Students和Classes多对多关系。

4Classes和Classes_info一对多关系。

5Classes和Teachers多对一关系。

6Classes和Courses多对一关系。

7Course和Department(系)多对一关系。

8Teachers和Department多对一关系。

9Students和Department多对一关系。

 

在Hibernate中将以上关系一一映射,如Students和History一对多关系

Students.cfg.xm.:

 1 

 2                  table="history" 

 3                  cascade="all"

 4                  inverse="true"

 5                  lazy="true"  >

 6                  

 7             

 8                                     />

 9             set>

10 

同样在History.cfg.xml中加入:

1  

2                   class="limq.hibernate.vo.Students"

3                   column="student_id"  >    

4      many-to-one>

用过MyEclipse开发Hibernate的就知道,MyEclipse会帮助我们生成持久对象和抽象对象,我们要在Students.java中加入对History的引用

privateSethistory=newHashSet();

publicSetgetHistory(){

returnhistory;

}

publicvoidsetHistory(Sethistory){

this.history=history;

}

同时,在AbstractHistory.java中删除student_id以及对应的get,set方法,History.java中加入

privateStudentsstudent;

publicStudentsgetStudent(){

returnstudent;

}

publicvoidsetStudent(Studentsstudent){

this.student=student;

}

具体内容请查看源代码。

2DAO数据访问层

首先,编写IBaseDao与BaseDao,其中IBaseDao代码如下:

 1 package limq.hibernate.dao;

 2 

 3 import java.util.Collection;

 4 import java.util.List;

 5 import net.sf.hibernate.Criteria;

 6 import net.sf.hibernate.Query;

 7 import net.sf.hibernate.Session;

 8 import limq.exception.DaoException;

 9 

10 public interface IBaseDao {

11     

12     public Session openSession();

13     

14     public  int getTotalCount( String hql) throws Exception;

15     

16     public Query getQuery(String sql) throws Exception;

17     

18     public Criteria getCriteria(Class clazz) throws Exception;

19     

20     public int getTotalPage(int totalCount,int pageSize);

21     

22     public void create(Object entity);

23 

24     public void update(Object entity);

25 

26     public void delete(Object entity) throws DaoException;

27 

28     public void deleteAll(Class clazz) throws DaoException;

29 

30     public void deleteAll(Collection entities) throws DaoException;

31 

32     public Object loadByKey(Class clazz, String keyName, Object keyValue);

33 

34     public List find(String queryString) throws DaoException;

35 

36     public List find(String queryString, Object param) throws DaoException;

37 

38     public List find(String queryString, Object[] params) throws DaoException;

39 

40 }

41 

BaseDao继承org.springframework.orm.hibernate.support.HibernateDaoSupport

实现以上的定义的方法

如:

 1 public void create(Object entity)  { 

 2         try { 

 3             getHibernateTemplate().save(entity); 

 4             

 5         } catch (Exception e) { 

 6             log.error("保存 " + entity.getClass().getName() + " 实例到数据库失败", e); 

 7            

 8         } 

 9     } 

10     /** 

11      * 获得session        

12      */ 

13     public Session openSession() {

14         return SessionFactoryUtils.getSession(getSessionFactory(), false);

15     }

16 

17     /** 

18      * 获得Query对象       

19      */ 

20     public Query getQuery(String sql) throws Exception{

21         Session session = this.openSession();

22         Query query = session.createQuery(sql); 

23     return query;

24     }

25     /** 

26      * 获得Criteria对象       

27      */

28     public Criteria getCriteria(Class clazz) throws Exception{

29         

30     Session session=this.openSession();

31     Criteria criteria = session.createCriteria(clazz);

32     return criteria;

33     }

34 

可以看到,这里即充分利用了Spring对Hibernate的支持,还弥补了Spring的不足。

最后分别为每个持久对象建立Interface,以及DAO,使其分别继承IBaseDao与BaseDao。

如IDepartment,DepartmentDao

1 public interface IDepartment extends IBaseDao {}

3 public class DepartmentDao extends BaseDao implements IBaseDao {}

 

3Service层

在这里需要认真思考每个业务逻辑所能用到的持久层对象和DAO,还要完成配置Spring框架,首先我一起看看applications-service.xml

 

  1 

xml version="1.0" encoding="UTF-8"?

>

  2 DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" 

  3     "http:

//www.springframework.org/dtd/spring-beans.dtd">

  4 

  5   

  6     

  7       com.mysql.jdbc.Drivervalue>

  8     property>

  9     

 10       jdbc:

mysql:

//localhost:

3306/Studentvalue>

 11     property>

 12     

 13       rootvalue>

 14     property>

 15     

 16       value>

 17     property>

 18   bean>

 19   

 20     

 21       

 22     property>

 23     

 24       

 25         limq/hibernate/vo/Admins.hbm.xmlvalue>

 26         limq/hibernate/vo/Classes.hbm.xmlvalue>

 27         limq/hibernate/vo/Courses.hbm.xmlvalue>

 28         limq/hibernate/vo/Students.hbm.xmlvalue>

 29         limq/hibernate/vo/ClassesInfo.hbm.xmlvalue>

 30         limq/hibernate/vo/Contact.hbm.xmlvalue>

 31         limq/hibernate/vo/Department.hbm.xmlvalue>

 32         limq/hibernate/vo/History.hbm.xmlvalue>

 33         limq/hibernate/vo/Teachers.hbm.xmlvalue>

 34       list>

 35     property>

 36     

 37       

 38         net.sf.hibernate.dialect.MySQLDialectprop>

 39         trueprop>

 40       props>

 41     property>

 42   bean>

 43   

 44     

 45       

 46     property>

 47   bean>

 48   

 49   

 50     

 51       

 52     property>

 53   bean>

 54   

 55     

 56       

 57     property>

 58   bean>

 59   

 60     

 61       

 62     property>

 63   bean>

 64   

 65     

 66       

 67     property>

 68   bean>

 69   

 70     

 71       

 72     property>

 73   bean>

 74   

 75     

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2