spring+hibernate+struts

來源:互聯網
上載者:User
介紹

本文並不想介紹Struts,Spring,Hibernate的原理系統架構等,本文地目的是通過一個較複雜地執行個體介紹如何整合Struts,Spring,Hibernate,網上現有的例子雖然也能達到目的,但功能都比較單一,複雜的例子時會有意想不到的麻煩。本文對讀者假設已經具備了以上架構的基礎知識。以及那些已經瞭解Struts,Spring,Hibernate的基本概念,但是還沒有親身在較複雜的項目中體驗Struts+Spring+Hibernate的開發人員。

1 Struts

    雖然不打算過多介紹Struts的原理,但是大概介紹一下還是有必要的。Struts本身就是 MVC 在這裡負責將使用者資料傳人業務層,以及 將業務層處理的結果返回給使用者,此系統屬於較簡單WEB應用,採用了OpenSessionInView模式處理LazyLoad問題,這樣我們可以在使用者視圖中使用 get,set方法來方便地擷取關聯對象。為了處理龐大的Action和ActionForm問題,在此我門準備使用DynaActionForm (DynaValidatorForm)和DispatchAction以及 動態驗證架構 來解決。及使用Tile來解決架構問題 。使用自訂標籤處理分頁和身分識別驗證問題。

2 Spring

    Spring Framework最得以出名的是與Hibernate的無縫連結,雖然Spring 對Hibernate提供了90%以上的封裝,使我們不必去關心Session 的建立,關閉,以及事務使我們能夠專心的關注商務邏輯。但是一些特殊情況如 有時需要Query以及Criteria 對象,分頁等,Spring不能給我們提供支援,總不能每次都在你的DAO上寫個HibernateCallBackup()吧?Spring的作用不是把Hibernate再封裝一層,而是讓你接觸不到Hibernate的API,而是協助你管理好Session和Transaction。

在這裡解決方案是:首先 寫一個IBase 的介面,和一個BaseDao的實現。在實現中仿照HibernateTemplate,將其功能一一實現,同時考慮到Spring 未能支援的地方,我們不得已只好自己來管理Session,因此加入public Session openSession(),public Query getQuery(String sql),public Criteria getCriteria(Class clazz),以及分頁的方法。 然後為每一個Entity 都建立繼承於以上類的IEntity,與EntityDao。這裡可以根據需求對Entity加入特殊的方法實現,如 在 StudentsDao.java 中加入類似使用者身分識別驗證等。以上就是資料訪問層。接下來在Service層中通過對dao的引用完成商務邏輯方法。在下面的例子中我們分別為學生模組,教師模組,管理員模組構建Service層,StudentsServiceImpl,TeachersServiceImpl,AdminServiceImpl。

 

3 Hibernate

 有了Spring的封裝,我們要對Hibernate做的就是正確實現對象關係的映射。由於此處處於系統的最底層,準確無誤的實現對象之間的關聯關係映射將起著至關重要的作用。

 總之,理解了Struts,Spring,Hibernate地原理以及之間的關係之後,剩下的工作就如同在以Spring為核心的Struts為表現的架構中堆積木。可以更好的協助我們理解Struts,Spring,Hibernate之間的關係。

案例簡述

設計思路主要源於 大學選修課,該系統可以方便處理學生在課程選報,學分查詢,成績查詢,以及 成績發布等。

系統以班級為核心,一門課程可以對應多個班級,一名教師也可以帶不同的班級,學生可以選報不同課程所對應的班級,班級自身有目前人數,和最大人數,以及上課時間,上課地點的屬性。

學生在選報班級之後,班級的人數會自動加一,直到等於最大人數時,其他學生將會有人數已滿的錯誤提示。同理如果學生選擇了同一課程的不同班級,也將收到錯誤提示。學生有密碼,系別,學分,地址,電話等屬性。

教師在系統中主要負責成績發布,教師可以對其所帶的班級的學生的成績修改,系統會以成績是否大於等於60來判斷學生是否通過考試,如果通過會將該課程的學分累加到學生學分,同樣如果教師二次修改了成績,而且小於60,系統會在學生學分上扣掉該課程的分數。

課程在系統中具體體現為班級,自身帶有學分屬性。
</S< body>

系有編號,名稱的屬性,同時可以作為聯絡教師,課程,學生的橋樑。

 

功能模組

l       身分識別驗證模組: 根據使用者名稱,密碼,使用者類別 轉寄使用者到不同的模組。

l       學生模組: 查看課程,查看班級,選報課程,查看己選課程,成績查詢。

l       教師模組: 錄入成績

l       管理員模組:對學生,教師,課程,班級,系 增,刪,查,改。

 

具體實踐

代碼下載
http://www.blogjava.net/Files/limq/StudentManger.rar
1  
對象關係映射:

首先,將庫表映射為資料模型(SQL在源碼中查看),轉換後的資料模型如:

由此我們可以看出一下關聯關係:

1 Students 和 Contact(連絡方式)一對一關聯性。

2 Students 和 History(選課曆史) 一對多關聯性

3 Students 和 Classes 多對多關係。

4 Classes 和 Classes_info 一對多關聯性。

5 Classes 和 Teachers 多對一關聯性。

6 Classes 和 Courses 多對一關聯性。

7 Course 和 Department(系) 多對一關聯性。

8 Teachers 和 Department 多對一關聯性。

9 Students 和 Department 多對一關聯性。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.