分頁(yè)應(yīng)該是在我們開(kāi)發(fā)web應(yīng)用時(shí)經(jīng)常要做的工作,能夠比較簡(jiǎn)潔的實(shí)現(xiàn)數(shù)據(jù)庫(kù)和視圖層的分頁(yè)十分重要。
在數(shù)據(jù)庫(kù)層利用hibernate進(jìn)行數(shù)據(jù)庫(kù)的分頁(yè),將從數(shù)據(jù)庫(kù)中查詢出的數(shù)據(jù)封裝為javabean;在視圖層就可以方便的實(shí)現(xiàn)分頁(yè)。
創(chuàng)建PageBean
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
package com.fishing.common.bean; import java.util.List; @SuppressWarnings ( "unchecked" ) public class PageBean { private List list; // 要返回的某一頁(yè)的記錄列表 private int allRow; // 總記錄數(shù) private int totalPage; // 總頁(yè)數(shù) private int currentPage; // 當(dāng)前頁(yè) private int pageSize; // 每頁(yè)記錄數(shù) private boolean isFirstPage; // 是否為第一頁(yè) private boolean isLastPage; // 是否為最后一頁(yè) private boolean hasPreviousPage; // 是否有前一頁(yè) private boolean hasNextPage; // 是否有下一頁(yè) public List getList() { return list; } public void setList(List list) { this .list = list; } public int getAllRow() { return allRow; } public void setAllRow( int allRow) { this .allRow = allRow; } public int getTotalPage() { return totalPage; } public void setTotalPage( int totalPage) { this .totalPage = totalPage; } public int getCurrentPage() { return currentPage; } public void setCurrentPage( int currentPage) { this .currentPage = currentPage; } public int getPageSize() { return pageSize; } public void setPageSize( int pageSize) { this .pageSize = pageSize; } /** */ /** * 初始化分頁(yè)信息 */ public void init() { this .isFirstPage = isFirstPage(); this .isLastPage = isLastPage(); this .hasPreviousPage = isHasPreviousPage(); this .hasNextPage = isHasNextPage(); } /** */ /** * 以下判斷頁(yè)的信息,只需getter方法(is方法)即可 * * @return */ public boolean isFirstPage() { return (currentPage == 1 ); // 如是當(dāng)前頁(yè)是第1頁(yè) } public boolean isLastPage() { return currentPage == totalPage; //如果當(dāng)前頁(yè)是最后一頁(yè) } public boolean isHasPreviousPage() { return currentPage != 1 ; //只要當(dāng)前頁(yè)不是第1頁(yè) } public boolean isHasNextPage() { return currentPage != totalPage; //只要當(dāng)前頁(yè)不是最后1頁(yè) } /** */ /** * 計(jì)算總頁(yè)數(shù),靜態(tài)方法,供外部直接通過(guò)類名調(diào)用 * * @param pageSize * 每頁(yè)記錄數(shù) * @param allRow * 總記錄數(shù) * @return 總頁(yè)數(shù) */ public static int countTotalPage( final int pageSize, final int allRow) { int totalPage = allRow % pageSize == 0 ? allRow / pageSize : allRow / pageSize + 1 ; return totalPage; } /** */ /** * 計(jì)算當(dāng)前頁(yè)開(kāi)始記錄 * * @param pageSize * 每頁(yè)記錄數(shù) * @param currentPage * 當(dāng)前第幾頁(yè) * @return 當(dāng)前頁(yè)開(kāi)始記錄號(hào) */ public static int countOffset( final int pageSize, final int currentPage) { final int offset = pageSize * (currentPage - 1 ); return offset; } /** */ /** * 計(jì)算當(dāng)前頁(yè),若為0或者請(qǐng)求的URL中沒(méi)有"?page=",則用1代替 * * @param page * 傳入的參數(shù)(可能為空,即0,則返回1) * @return 當(dāng)前頁(yè) */ public static int countCurrentPage( int page) { final int curPage = (page == 0 ? 1 : page); return curPage; } } |
在Dao的抽象接口BaseDao中添加方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
public List queryForPage( final String hql, final int offset, final int length); 在Dao的實(shí)現(xiàn)類JianSheDWDaoImpl中實(shí)現(xiàn)方法 public List queryForPage( final String hql, final int offset, final int length) { List list = getHibernateTemplate().executeFind( new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query query = session.createQuery(hql); query.setFirstResult(offset); query.setMaxResults(length); List list = query.list(); return list; } }); return list; } |
在service抽象層接口JianSheDWService中添加方法:
1
|
public PageBean queryForPage( int pageSize, int currentPage); |
在service實(shí)現(xiàn)類中實(shí)現(xiàn)方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
public PageBean queryForPage( int pageSize, int page) { final String hql = "from JianSheDWBean" ; // 查詢語(yǔ)句 int allRow = this .baseDao.getAllRowCount(hql); // 總記錄數(shù) int totalPage = PageBean.countTotalPage(pageSize, allRow); // 總頁(yè)數(shù) final int offset = PageBean.countOffset(pageSize, page); // 當(dāng)前頁(yè)開(kāi)始記錄 final int length = pageSize; // 每頁(yè)記錄數(shù) final int currentPage = PageBean.countCurrentPage(page); List<JianSheDWBean> list = this .baseDao.queryForPage(hql, offset, length); // "一頁(yè)"的記錄 // 把分頁(yè)信息保存到Bean中 PageBean pageBean = new PageBean(); pageBean.setPageSize(pageSize); pageBean.setCurrentPage(currentPage); pageBean.setAllRow(allRow); pageBean.setTotalPage(totalPage); pageBean.setList(list); pageBean.init(); return pageBean; } |
在視圖層action中建立分頁(yè)模型
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
package com.fishing.action.lcq; import com.fishing.common.bean.JianSheDWBean; import com.fishing.common.bean.PageBean; import com.fishing.service.lcq.JianSheDWService; import com.opensymphony.xwork2.ActionSupport; @SuppressWarnings ( "serial" ) public class GetInfoJSDWListAction extends ActionSupport { private int page; // 第幾頁(yè) private PageBean pageBean; // 包含分布信息的bean private JianSheDWBean jianSheDWBean; // private PageBean page; private JianSheDWService jianSheDWService; public int getPage() { return page; } public void setPage( int page) { this .page = page; } public PageBean getPageBean() { return pageBean; } public void setPageBean(PageBean pageBean) { this .pageBean = pageBean; } public JianSheDWBean getJianSheDWBean() { return jianSheDWBean; } public void setJianSheDWBean(JianSheDWBean jianSheDWBean) { this .jianSheDWBean = jianSheDWBean; } public JianSheDWService getJianSheDWService() { return jianSheDWService; } public void setJianSheDWService(JianSheDWService jianSheDWService) { this .jianSheDWService = jianSheDWService; } @Override public String execute() throws Exception { //分頁(yè)的pageBean,參數(shù)pageSize表示每頁(yè)顯示記錄數(shù),page為當(dāng)前頁(yè) this .pageBean = jianSheDWService.queryForPage( 10 , page); return SUCCESS; } } |
在jsp中編寫分頁(yè)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
<tr class= "odd" > <td> </td> <td> <s: if test= "%{pageBean.currentPage == 1}" > 首頁(yè) 上一頁(yè) </s: if > <s: else > <a href= "jianguan/getJSDWInfos.action?page=1" >首頁(yè)</a> <a href= "jianguan/getJSDWInfos.action?page=<s:property value=" %{pageBean.currentPage-1} "/>" />上一頁(yè)</a> </s: else > </td> <td> <s: if test= "%{pageBean.currentPage != pageBean.totalPage}" > <a href= "jianguan/getJSDWInfos.action?page=<s:property value=" %{pageBean.currentPage+1} "/>" >下一頁(yè)</a> <a href= "jianguan/getJSDWInfos.action?page=<s:property value=" pageBean.totalPage "/>" >尾頁(yè) </a> </s: if > <s: else > 下一頁(yè) 尾頁(yè) </s: else > </td> <td> <div align= "center" > 頁(yè)次 <s:property value= "pageBean.currentPage" /> / <s:property value= "pageBean.totalPage" /> 共 <s:property value= "pageBean.allRow" /> 記錄 </div> <div align= "center" ></div> </td> </tr> |
上面只是代碼的實(shí)現(xiàn),沒(méi)有說(shuō)明配置文件的配置,讀者根據(jù)情況配置。
希望本文所述對(duì)你有所幫助,SSH2實(shí)現(xiàn)數(shù)據(jù)庫(kù)和界面的分頁(yè)內(nèi)容就給大家介紹到這里了。希望大家繼續(xù)關(guān)注我們的網(wǎng)站!想要學(xué)習(xí)java可以繼續(xù)關(guān)注本站。