国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于URL 參數(shù)傳遞的數(shù)據(jù)庫分頁顯示技術(shù)實(shí)現(xiàn)

2012-07-02 01:46萬福成于洪志何向真吳志強(qiáng)
關(guān)鍵詞:中間層編程對象

萬福成,于洪志,何向真,吳志強(qiáng)

(西北民族大學(xué)中國民族語言文字信息技術(shù)國家民委—教育部重點(diǎn)實(shí)驗(yàn)室,蘭州730030)

0 引言

隨著互聯(lián)網(wǎng)新興技術(shù)的發(fā)展,傳統(tǒng)的靜態(tài)頁面已經(jīng)不能滿足人們的需求,正因?yàn)槿绱耍赪eb的項(xiàng)目與數(shù)據(jù)庫的聯(lián)系才越來越密切。如何簡單、方便、快速地實(shí)現(xiàn)數(shù)據(jù)庫查詢分頁顯示,以及如何在眾多的不同類型數(shù)據(jù)庫中實(shí)現(xiàn)分頁成為Web項(xiàng)目要解決的問題。

傳統(tǒng)的基于Web服務(wù)器分頁適合數(shù)據(jù)量比較小的情況,數(shù)據(jù)量大時(shí)會(huì)影響Web服務(wù)器性能,占用過多的內(nèi)存,分頁速度也比較慢?;跀?shù)據(jù)庫服務(wù)器的分頁可以避免以上情況,但也會(huì)遇到不同類型的數(shù)據(jù)庫,如Mysql,Oracle等,不同的數(shù)據(jù)查詢分頁用到不同的SQL語句,語句繁多,不利于移植與維護(hù)。

本文基于URL參數(shù)傳遞方式,并采用當(dāng)前流行的Sturts和Hibernate框架技術(shù)來實(shí)現(xiàn)數(shù)據(jù)庫分頁顯示技術(shù),方法簡單、實(shí)用、快速。

1 Web體系結(jié)構(gòu)設(shè)計(jì)

采用典型的J2EE三層結(jié)構(gòu),J2EE技術(shù)的基礎(chǔ)就是核心Java平臺(tái)或Java2平臺(tái)的標(biāo)準(zhǔn)版,J2EE不僅鞏固了標(biāo)準(zhǔn)版中的許多優(yōu)點(diǎn),分為表現(xiàn)層、中間層(業(yè)務(wù)邏輯層)和數(shù)據(jù)服務(wù)層。三層體系將業(yè)務(wù)規(guī)則、數(shù)據(jù)訪問及合法性校驗(yàn)等工作放在中間層處理??蛻舳瞬恢苯优c數(shù)據(jù)庫交互,而是通過組件與中間層建立連接,再由中間層與數(shù)據(jù)庫交互。

1.1 表現(xiàn)層設(shè)計(jì)

表現(xiàn)層即Web層,就是MVC模式里面的“V”(view),展現(xiàn)給用戶的界面,可以使jsp,asp,html等,這里采用jsp技術(shù),jsp技術(shù)自1999年問世以來,經(jīng)過多年的發(fā)展,其廣泛的應(yīng)用和穩(wěn)定的表現(xiàn),為其作為表現(xiàn)層技術(shù)打下了堅(jiān)實(shí)的基礎(chǔ)。

1.2 中間層設(shè)計(jì)

中間層為了將控制層與數(shù)據(jù)服務(wù)層分離,即Web項(xiàng)目中的業(yè)務(wù)邏輯Service層。

Service層負(fù)責(zé)實(shí)現(xiàn)業(yè)務(wù)邏輯。業(yè)務(wù)邏輯層以DAO層為基礎(chǔ),通過對DAO組件的封裝,完成系統(tǒng)所要求的業(yè)務(wù)邏輯。這一層屬于接口層,由ServiceImpl實(shí)現(xiàn)層來實(shí)現(xiàn)具體的業(yè)務(wù)邏輯。

1.3 數(shù)據(jù)服務(wù)層設(shè)計(jì)

DAO層負(fù)責(zé)與持久化對象交互。該層封裝了數(shù)據(jù)的增、刪、查、改的操作。

PO,也叫bean層持久化對象。通過實(shí)體關(guān)系映射工具將關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)映射成對象,很方便地實(shí)現(xiàn)以面向?qū)ο蠓绞讲僮鲾?shù)據(jù)庫,系統(tǒng)采用Hibernate作為ORM框架。Hibernate為持久層提供支持,將具體的bean持久到數(shù)據(jù)庫中。系統(tǒng)中的所有類,都要持久化到數(shù)據(jù)庫中,與數(shù)據(jù)庫中的表相對應(yīng),類中的所有屬性也要與表中的各個(gè)字段相對應(yīng),每個(gè)類都會(huì)生成相應(yīng)的實(shí)體類hbm.xml文件,即Hibernate的映射文件,Hibernate與數(shù)據(jù)庫關(guān)系如圖1所示。

圖1 Hibernate與數(shù)據(jù)庫關(guān)系圖

2 分頁類的設(shè)計(jì)

分頁基本信息類PageInfo是涉及和分頁有關(guān)的信息的Java類,成員變量包含當(dāng)前頁碼cur,總頁數(shù)total,每頁顯示記錄數(shù)size。

類內(nèi)生成setter和getter方法,這樣一個(gè)完整的分頁基本信息類已經(jīng)完成,作為生成對象的模板。

分頁構(gòu)造類PageMaker是以PageInfo的對象和URL作為參數(shù)來構(gòu)造,構(gòu)造函數(shù)為makelist(PageInfo pageInfo,String URL),返回一個(gè)一個(gè)字符串對象用來做前臺(tái)的顯示。

分頁構(gòu)造中采用了URL作為構(gòu)造參數(shù),在URL中我們可以傳遞cur這個(gè)參數(shù)作為某個(gè)頁的頁碼,這樣我們便可以方便地查詢到指定頁的記錄,而不必將所有記錄都查詢出來,從而可以提高服務(wù)器的性能。

3 分頁流程設(shè)計(jì)與實(shí)現(xiàn)

以學(xué)生基本信息student為例,具體實(shí)現(xiàn)數(shù)據(jù)庫查詢分頁技術(shù)。

3.1 bean類設(shè)計(jì)

bean類即PO類,普通的Java實(shí)體類,以學(xué)生類student為例,成員變量包括用戶名username,密碼password,郵箱email等。

3.2 DAO及其實(shí)現(xiàn)層的設(shè)計(jì)

DAO即數(shù)據(jù)訪問對象,用來訪問數(shù)據(jù)庫,student類對應(yīng)的為studentDAO,實(shí)現(xiàn)為studentDAOImpl,在studentDAO中以 HibernateTemplate作為成員變量,通過HibernateTemplate進(jìn)行對數(shù)據(jù)庫的增刪改查操作。

3.3 Service及其實(shí)現(xiàn)層的設(shè)計(jì)

Service層是業(yè)務(wù)處理層,用來滿足用戶的需求,student類對應(yīng)的為studentService,實(shí)現(xiàn)為studentServiceImpl,以面向借口進(jìn)行編程。

3.4 action層的設(shè)計(jì)

action為控制層,查詢所有學(xué)生信息,并分頁顯示,對應(yīng)的action為listAllStudentsAction,在action中調(diào)用分頁信息,從而實(shí)現(xiàn)真正數(shù)據(jù)庫分頁顯示。

3.5 流程控制與分頁實(shí)現(xiàn)

在listAllStudentAction中封裝了studentService,即以studentService作為成員變量,student-ServiceImpl中又以studentDAO作為成員變量,studentDAOImpl以HibernateTemplate作為成員變量,從而訪問數(shù)據(jù)庫,這樣層次很清晰,易于維護(hù)。

實(shí)現(xiàn)查詢所有學(xué)生,首先在數(shù)據(jù)庫中查詢所有學(xué)生記錄的個(gè)數(shù),通過studentService.getRows()來得到所有學(xué)生記錄個(gè)數(shù),將pageInfo的total設(shè)置為該值,在URL中傳入當(dāng)前頁ppp,將pageInfo的cur值設(shè)置為URL傳入的當(dāng)前頁的值,每頁顯示記錄的個(gè)數(shù)可以預(yù)先指定,也可以通過傳參形式指定,這樣我們要查詢的涉及到所有分頁基本信息都已經(jīng)賦值,構(gòu)造分頁信息pageMaker.makeList(pageInfo,URL),將分頁基本信息和 URL,當(dāng)前頁信息傳入,這樣就成功構(gòu)造了分頁信息??傮w流程如下圖2所示。

圖2 分頁流程控制圖

在前臺(tái)jsp頁面中的顯示分頁信息需要Struts2的標(biāo)簽支持,用來得到分頁類的信息,具體標(biāo)簽代碼為<s:porperty value=”pager”/>,將查詢到的學(xué)生信息存入student_list這樣一個(gè)表中,通過迭代取出相應(yīng)頁的學(xué)生信息。這樣涉及到數(shù)據(jù)庫查詢,分頁的設(shè)計(jì)便已經(jīng)實(shí)現(xiàn)。

4 不同數(shù)據(jù)庫的解決方案

不同的數(shù)據(jù)庫,都可以將Hibernate作為框架,從而隱藏了不同數(shù)據(jù)庫不同的查詢語句的弊端,HibernateTemplate提供非常多的常用方法來完成基本的操作,比如通常的增加、刪除、修改、查詢等操作,Spring 2.0更增加對命名SQL查詢的支持,也增加對分頁的支持。大部分情況下,使用Hibernate的常規(guī)用法,就可完成大多數(shù)DAO對象的CRUD操作。

HibernateTemplate還提供一種更加靈活的方式來操作數(shù)據(jù)庫,通過這種方式可以完全使用Hibernate的操作方式。HibernateTemplate的靈活訪問方式是通過這個(gè)方法execute(HibernateCallback action),方法中需要一個(gè) HibernateCallback的實(shí)例,HibernateCallback實(shí)例可在任何有效的Hibernate數(shù)據(jù)訪問中使用。程序開發(fā)者通過Hibernate-Callback,可以完全使用Hibernate靈活的方式來訪問數(shù)據(jù)庫,解決Spring封裝Hibernate后靈活性不足的缺陷。HibernateCallback是一個(gè)接口,該接口只有一個(gè)方法doInHibernate(org.hibernate.Session session),該方法只有一個(gè)參數(shù)Session。

通常,程序中采用實(shí)現(xiàn)HibernateCallback的匿名內(nèi)部類來獲取HibernateCallback的實(shí)例,方法doInHibernate的方法體就是Spring執(zhí)行的持久化操作。項(xiàng)目中具體代碼如下(使用了HQL查詢語句):

HibernateTemplate也同樣支持?jǐn)?shù)據(jù)庫連接池,利于數(shù)據(jù)庫的優(yōu)化,對于不同的數(shù)據(jù)庫對于Web項(xiàng)目來說,只是添加的不同的數(shù)據(jù)庫驅(qū)動(dòng)不同而已,這樣利于項(xiàng)目的維護(hù)與移植。

5 結(jié)語

通過在URL傳遞參數(shù),實(shí)現(xiàn)數(shù)據(jù)庫分頁查詢,不僅簡單、方便,而且在其中用到了當(dāng)前流行的Struts、Hibernate技術(shù)作為支持,更使得項(xiàng)目更清晰,利于維護(hù),此外在項(xiàng)目中也可以加入Spring技術(shù),基于切面編程和依賴注入或使得項(xiàng)目更加整潔,也更加清晰。

[1]劉啟文,周大海,夏秀峰.Web應(yīng)用中可擴(kuò)展分頁技術(shù)的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用,2006(s2):179-181.

[2]高文鵬.Java Web分頁技術(shù)與實(shí)現(xiàn)[J].電腦編程技巧與維護(hù),2010(8):82-84.

[3]李政.JAVA數(shù)據(jù)庫數(shù)據(jù)分頁技術(shù)[J].電腦編程技巧與維護(hù),2004(4):38-39.

[4]陳丹桂,任周.基于JSP分頁技術(shù)的研究[J].計(jì)算機(jī)與數(shù)字工程,2009(6):98-100.

[5]周作建,惠志婷,徐穎.JSP分頁技術(shù)[J].電腦編程技巧與維護(hù),2007(8):13-17.

[6]閻冰潔,萬亮,肖敏.高性能查詢分頁技術(shù)的研究與應(yīng)用[J].電腦知識與技術(shù),2006(14):82-83.

[7]翟高粵.基于Struts和Hibernate的文本按行分頁技術(shù)[J].計(jì)算機(jī)時(shí)代,2009(8):40-41.

[8]付文平,羅鍵.基于Web的分頁技術(shù)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)時(shí)代,2007(10):57-59.

猜你喜歡
中間層編程對象
涉稅刑事訴訟中的舉證責(zé)任——以納稅人舉證責(zé)任為考察對象
編程,是一種態(tài)度
元征X-431實(shí)測:奔馳發(fā)動(dòng)機(jī)編程
編程小能手
紡織機(jī)上誕生的編程
一種十七股子午胎鋼絲簾線
攻略對象的心思好難猜
基于熵的快速掃描法的FNEA初始對象的生成方法
鎳基高溫合金TLP擴(kuò)散焊中間層材料研究進(jìn)展
B含量對IC10合金TLP焊接用中間層材料及接頭組織的影響
三门峡市| 瓮安县| 怀柔区| 香港 | 当涂县| 新郑市| 乐东| 成武县| 麻阳| 沈阳市| 阳山县| 申扎县| 额敏县| 稷山县| 陈巴尔虎旗| 武冈市| 仁化县| 厦门市| 金乡县| 旬阳县| 丹棱县| 商城县| 三明市| 墨江| 绥阳县| 青州市| 五原县| 广安市| 酉阳| 定州市| 濮阳县| 玉树县| 突泉县| 江北区| 综艺| 乌审旗| 龙海市| 烟台市| 蚌埠市| 宝应县| 青龙|