程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> javaEE 分頁功能最終代碼優化(二)

javaEE 分頁功能最終代碼優化(二)

編輯:JAVA綜合教程

javaEE 分頁功能最終代碼優化(二)


上次進行了分頁代碼的優化,但是不足之處就是在Action層中寫hql語句,如果hql語句比較復雜,例如條件查詢,會有一些參數的判斷,是非常容易出錯的。下面對分頁查詢進一步優化,將會變得非常簡單。

下面我們就完成一個帶條件的查詢,如下圖,可以選擇部門、按照姓名、按照賬號進行條件查詢,同時分頁。

\

一:還是先看簡單的,jsp界面代碼的進一步抽取。

(1)之前已經把公共的頁碼顯示的代碼抽取出去了,但是每個界面還是要寫一段javascript代碼,來指定對應的xxx.action

\

其實也可以直接定義一個form,

\

然後得到form,提交form即可,所以以後直接寫個form標簽,指定action即可

\

我們要完成條件查詢,將內容放在form標簽內,提交表單在Action層就得到對應的屬性值了

\

二:下面就是解決在Action層寫hql語句的問題,可以定義一個QueryHelper類,將來通過這個類來拼接hql語句和傳遞參數列表,處理好之後作為參數傳遞給PageBean處理即可(關於PageBean請看上一篇博客)

(1)需要拼接from(必須要有的語句)、where、orderby語句,定義這三個屬性,還有需要得到對應的參數列表

\

(2)定義構造函數,在Action層new一個對象的時候就傳遞from語句的參數(就是類名)

\

(3)拼接where語句,Action層需要傳遞條件和參數列表,注意這裡的參數是可變參數,因為是不確定的,具體看下面注釋。

剛剛定義屬性的時候對whereClause和orderByClause初始化為空字符串,所以第一次調用此方法拼接是from xxx where xxx.yyy=?,下面再調用就是where xxx.yyy=?and xxx.zzz=?

還有這裡方法的類型都是QueryHelper類型的,return this;表示返回類的對象,這樣就可以接著調用自己的方法增加條件了,不用一個語句一個語句的分開寫了(具體看下面Action層中的調用)

\

(3)下面一個方法的主要作用是判斷是否要去拼接where語句,這麼做的原因是因為界面的條件是多個,用戶可能不全部選擇,那麼就需要在Action中判斷了,if(xxx) 調用拼接;所以這麼做就可以直接一路調用下來,不用在Action中if判斷了

\

(4)同理orderby也是如此,這裡就不列出了,此次條件查詢不需排序。

得到hql語句的方法:

\

(5)得到查詢總記錄條數的hql語句和參數列表的語句:

\

三:

(1)在Action中,聲明界面傳遞過來的屬性,實現get、set方法

\

\

(2)構造一個QueryHelp對象,如下圖:(就是這裡可以通過"."就可以調用自己的方法了),

\

要得到PageBean對象將QueryHelp對象作為參數傳遞過去即可

\

(3)這裡可以進一步優化,因為每個Action中都需要service調用getPageBean()方法,然後將得到的PageBean對象放到棧頂。所以可以將其抽取到QueryHepler類中,直接寫個方法就完成此功能。

如下圖:

\

所以這裡直接一路下來就可以得到分頁的信息並將其放到了棧頂。完畢。

\

 

四:總結

至此分頁相關的代碼優化基本差不多了,之後再寫分頁的操作將會非常的容易而且不易出錯。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved