湖南城市學(xué)院圖書館 曹異卿
?
基于Struts+Spring+Hibernate框架的圖書借閱系統(tǒng)設(shè)計(jì)
湖南城市學(xué)院圖書館曹異卿
圖書借閱系統(tǒng)是圖書館信息系統(tǒng)的重要組成部分,本文設(shè)計(jì)了一個(gè)基于Struts+Spring+Hibernate框架的圖書借閱系統(tǒng),系統(tǒng)基于輕量級(jí)的SSH框架設(shè)計(jì),具有很高的靈活性和可擴(kuò)展性。系統(tǒng)實(shí)現(xiàn)了Web方式的圖書借閱系統(tǒng),與傳統(tǒng)C/S借閱系統(tǒng)相比,對(duì)客戶端環(huán)境沒(méi)有要求,并且實(shí)現(xiàn)了學(xué)生通過(guò)Internet來(lái)遠(yuǎn)程檢索圖書功能。
圖書借閱系統(tǒng);Struts;Spring;Hibernate
目前,國(guó)內(nèi)的高校圖書館大都實(shí)現(xiàn)了日常業(yè)務(wù)的自動(dòng)化集成管理,絕大多數(shù)圖書館都購(gòu)買或建立了數(shù)據(jù)庫(kù)管理信息系統(tǒng)。一方面,隨著目前高等院校的擴(kuò)招,圖書館的讀者成千上萬(wàn),他們性別不同,專業(yè)不同,閱讀興趣和愛(ài)好也各不相同。另一方面,目前高等院校圖書館的購(gòu)書經(jīng)費(fèi)都比較緊張,面對(duì)目前出版商和書店堆積如山的圖書,如何了解各個(gè)專業(yè)學(xué)生的借閱興趣,充分利用有限的購(gòu)書經(jīng)費(fèi)采購(gòu)到令讀者滿意的圖書,提高服務(wù)的質(zhì)量等,均日益成為圖書館管理層一個(gè)重要的問(wèn)題。圖書館集成管理系統(tǒng)每天都會(huì)產(chǎn)生大量的統(tǒng)計(jì)數(shù)據(jù)和表單,它們對(duì)圖書館了解讀者的借閱興趣、圖書采購(gòu)、信息咨詢等業(yè)務(wù)都有著很強(qiáng)的指導(dǎo)作用。如何充分利用這些日益增長(zhǎng)的大量數(shù)據(jù),從中找到有用的信息,迫切要求一種強(qiáng)有力的數(shù)據(jù)采集和處理工具介入到圖書館自動(dòng)化系統(tǒng)中來(lái),為圖書館工作提供新的技術(shù)和決策管理支持,而數(shù)據(jù)倉(cāng)庫(kù)和聯(lián)機(jī)分析處理正是這樣一種新興的技術(shù)。另外,從教與學(xué)的角度來(lái)考慮,通過(guò)對(duì)學(xué)生大量借閱數(shù)據(jù)的分析,還可以了解學(xué)生課下對(duì)各個(gè)學(xué)科的學(xué)習(xí)情況,從而對(duì)學(xué)生的學(xué)習(xí)起到督促的作用[1]。
圖書借閱系統(tǒng)作為圖書館的主要信息系統(tǒng),不僅要實(shí)現(xiàn)圖書檢索、借閱功能,還要完成圖書的庫(kù)存管理功能。圖書管理系統(tǒng)可以采用目前的各種流行軟件開(kāi)發(fā)架構(gòu)實(shí)現(xiàn),如ASP.NET和JSP等,針對(duì)圖書館的需求,選擇了性能比較好,可擴(kuò)展性高的Struts+Spring+Hibernate結(jié)合JSP技術(shù)進(jìn)行實(shí)現(xiàn)。
數(shù)據(jù)庫(kù)采用Microsoft SQL Server 2005,包括圖書類型庫(kù)表、書目庫(kù)表、借書信息庫(kù)表、部門信息庫(kù)表、圖書管理員庫(kù)表、借閱人庫(kù)表、借閱期限庫(kù)表、歸還狀態(tài)庫(kù)表。
Struts/Spring/Hibernate集成框架是Struts、Spring和Hibernate三種技術(shù)的有機(jī)融合,是目前應(yīng)用最廣泛的Java EE架構(gòu)。在Struts/Spring/ Hibernate集成框架中,Struts的作用是提供MVC模型,將界面、業(yè)務(wù)邏輯和數(shù)據(jù)分離,并提供一個(gè)高可擴(kuò)展的架構(gòu)。Spring作為依賴注入的容器,將項(xiàng)目中的構(gòu)建進(jìn)行粘結(jié)。而Hibernate提供了一個(gè)抽象的數(shù)據(jù)服務(wù)視圖,將用戶對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)進(jìn)行高度抽象。[2]
Struts是MVC模式的一種優(yōu)良設(shè)計(jì),Struts對(duì)Model,View和Controller都提供了對(duì)應(yīng)的組件[3]。ActionServlet是Struts的核心控制器,負(fù)責(zé)攔截來(lái)自用戶的請(qǐng)求。Action通常由用戶提供,該控制器負(fù)責(zé)接收來(lái)自ActionServlet的請(qǐng)求,并根據(jù)該請(qǐng)求調(diào)用模型的業(yè)務(wù)邏輯方法處理請(qǐng)求,并將處理結(jié)果返回給JSP頁(yè)面顯示,如圖1所示。
Spring是一個(gè)開(kāi)源框架,它由Rod Johnson創(chuàng)建。它是為了解決企業(yè)應(yīng)用開(kāi)發(fā)的復(fù)雜性而創(chuàng)建的。Spring使用基本的JavaBean來(lái)完成以前只可能由EJB完成的事情。然而,Spring的用途不僅限于服務(wù)器端的開(kāi)發(fā)。[4]從簡(jiǎn)單性、可測(cè)試性和松耦合的角度而言,任何Java應(yīng)用都可以從Spring中受益。簡(jiǎn)單來(lái)說(shuō),Spring是一個(gè)輕量級(jí)的控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架。Spring包含并管理應(yīng)用對(duì)象的配置和生命周期,在這個(gè)意義上它是一種容器,你可以配置你的每個(gè)bean如何被創(chuàng)建——基于一個(gè)可配置原型(prototype),你的bean可以創(chuàng)建一個(gè)單獨(dú)的實(shí)例或者每次需要時(shí)都生成一個(gè)新的實(shí)例——以及它們是如何相互關(guān)聯(lián)的。然而,Spring不應(yīng)該被混同于傳統(tǒng)的重量級(jí)的EJB容器,它們經(jīng)常是龐大與笨重的,難以使用。
圖1 Struts的系統(tǒng)架構(gòu)
Hibernate是一個(gè)開(kāi)放源代碼的對(duì)象關(guān)系映射框架,它對(duì)JDBC進(jìn)行了非常輕量級(jí)的對(duì)象封裝,使得Java程序員可以隨心所欲的使用對(duì)象編程思維來(lái)操縱數(shù)據(jù)庫(kù)。[5]Hibernate可以應(yīng)用在任何使用JDBC的場(chǎng)合,既可以在Java的客戶端程序使用,也可以在Servlet/ JSP的Web應(yīng)用中使用,最具革命意義的是,Hibernate可以在應(yīng)用EJB的J2EE架構(gòu)中取代CMP,完成數(shù)據(jù)持久化的重任。
在Struts+Spring+Hibernate框架中,利用Sturts來(lái)實(shí)現(xiàn)MVC模式,使用Spring來(lái)實(shí)現(xiàn)容器,使用Hibernate來(lái)訪問(wèn)數(shù)據(jù)庫(kù),給系統(tǒng)開(kāi)發(fā)帶來(lái)了前所未有的幫助,集成后的系統(tǒng)架構(gòu)如圖2所示。
圖2 系統(tǒng)架構(gòu)設(shè)計(jì)
數(shù)據(jù)庫(kù)訪問(wèn)公共代碼設(shè)計(jì):
面向?qū)ο蟮某绦蛟O(shè)計(jì)能夠有效地減少代碼冗余,提高編程效率。在系統(tǒng)設(shè)計(jì)中,除了采用面向?qū)ο蟮某绦蛟O(shè)計(jì)外,還對(duì)公共代碼進(jìn)行了提取,編寫公共代碼模塊,以提高系統(tǒng)的復(fù)用程度,基本數(shù)據(jù)庫(kù)訪問(wèn)就采用了復(fù)用技術(shù),BaseHbmDAO的程序如下。
public class BaseHbmDAO
{
public BaseHbmDAO()
{
autoClose = true;
isTransaction = false;
}
……
public void remove(Object obj)
throws DAOException
{
Transaction trans = null;
try
{
trans = ses.beginTransaction();
ses.delete(obj);
trans.commit();
}
catch(Exception e)
{
……
}
finally
{
……
}
}
BookAction的實(shí)現(xiàn)如下:
HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {
BookActionForm form = (BookActionForm) actionForm;
BookLogic logic = new BookLogic();
logic.setForm(form);
if(form.getOperation().equals("delete"))
{
logic.deleteBook();
form.setOperation("display");
}
if(form.getOperation().equals("save"))
{
logic.saveBook();
form.setOperation("display");
}
if(form.getOperation().equals("add"))
{
logic.addBook();
form.setOperation("display");
logic.closeDAO();
return actionMapping.findForward("book");
}
logic.getBooks();
logic.closeDAO();
return actionMapping.findForward("book");
}
}
基于Struts+Spring+Hibernate的圖書借閱系統(tǒng)提高了圖書借閱的效率,采用輕量級(jí)的系統(tǒng)架構(gòu),讓系統(tǒng)不僅在實(shí)現(xiàn)速度上有了提升,而且在可用性、可擴(kuò)展性和靈活性上面有了提高。系統(tǒng)不僅能實(shí)現(xiàn)圖書借閱功能,而且實(shí)現(xiàn)了學(xué)生通過(guò)互聯(lián)網(wǎng)進(jìn)行書籍檢索,節(jié)約了學(xué)生到圖書館檢索的時(shí)間,提高了工作效率。
[1]劉冰榮.基于微信的個(gè)性化圖書借閱平臺(tái)構(gòu)建[J].圖書館學(xué)刊,2014,12:117-119.
[2]丁夷,金永賢.基于Struts+Spring+Hibernate框架的手機(jī)圖書館服務(wù)系統(tǒng)[J].大學(xué)圖書館學(xué)報(bào),2011,01:77-82.
[3]薛峰,梁鋒,徐書勛,王彪任.基于Spring MVC框架的Web研究與應(yīng)用[J].合肥工業(yè)大學(xué)學(xué)報(bào)(自然科學(xué)版),2012,03:337-340.
[4]萬(wàn)東.基于Struts+Hibernate+Spring的輕量級(jí)J2EE框架[J].現(xiàn)代電子技術(shù),2011,16:39-41.
[5]李洋,孫永維,許冰,王英雙.基于Ajax,Struts,Hibernate和Spring的J2EE架構(gòu)[J].吉林大學(xué)學(xué)報(bào)(信息科學(xué)版),2011,06:576-584.
湖南城市學(xué)院科技計(jì)劃項(xiàng)目(項(xiàng)目名稱:開(kāi)放式圖書館數(shù)字資源檢索網(wǎng)絡(luò)優(yōu)化研究,項(xiàng)目編號(hào):2014xj34)。
曹異卿(1979—),女,大學(xué)本科,助理工程師,現(xiàn)供職于湖南城市學(xué)院圖書館,研究方向:情報(bào)學(xué),計(jì)算機(jī)應(yīng)用。