springmvc 分页查询的简单实现示例代码

2025-05-29 0 103

目前较常用的分页实现办法有两种:

1.每次翻页都修改SQL,向SQL传入相关参数去数据库实时查出该页的数据并显示。

2.查出数据库某张表的全部数据,再通过在业务逻辑里面进行处理去取得某些数据并显示。

对于数据量并不大的简单的管理系统而言,第一种实现方法相对来说容易使用较少的代码实现分页这一功能,本文也正是为大家介绍这种方法:

代码片段:

1,Page.java

?

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

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274
package com.cm.contract.common;

import org.apache.commons.lang.StringUtils;

import org.apache.commons.lang.builder.ToStringBuilder;

/**分页类

* @author FENGWEI

* @date 2016-5-23

*/

public class Page implements java.io.Serializable{

private static final long serialVersionUID = 1L;

//前一页

private Boolean hasPrePage;

//后一页

private Boolean hasNextPage;

//每页显示多少条:默认20条

private Long everyPage = 20L;

//总页数

private Long totalPage;

//当前第多少页:默认第1页

private Long currentPage = 1L;

//开始下标

private Long beginIndex;

//结束下标

private Long endinIndex;

//总共多少条

private Long totalCount;

//排序列名

private String sortName;

//排序状态

private String sortState;

//排序信息

private String sortInfo;

//是否排序

private Boolean sort = false;

private String defaultInfo = " ";

public String getDefaultInfo() {

return defaultInfo;

}

public void setDefaultInfo(String defaultInfo) {

this.defaultInfo = defaultInfo;

}

public String getSortInfo() {

return sortInfo;

}

public void setSortInfo(String sortInfo) {

this.sortInfo = sortInfo;

}

public String getSortName() {

return sortName;

}

public void setSortName(String sortName) {

setPageSortState(sortName);

}

public String getSortState() {

return sortState;

}

public void setSortState(String sortState) {

this.sortState = sortState;

}

public Page() {

}

/**

* 常用,用于计算分页

* */

public Page(Long totalRecords){

this.totalCount = totalRecords;

setTotalPage(getTotalPage(totalRecords));

}

/**

* 设置每页显示多少条时使用

* */

public Page(Long everyPage,Long totalRecords){

this.everyPage = everyPage;

this.totalCount = totalRecords;

setTotalPage(getTotalPage(totalRecords));

}

/**

* @param state 状态码

* @param value 到第多少页或者设置每页显示多少条或者为排序列名

*/

public void pageState(int index,String value) {

sort = false;

switch (index) {

case 0 :setEveryPage(Long.parseLong(value));break;

case 1 :first();break;

case 2: previous();break;

case 3: next();break;

case 4: last();break;

case 5: sort = true;sort(value);break;

case 6 ://到指定第多少页

setCurrentPage(Long.parseLong(value));

break;

}

}

/**

* 最前一页

*/

private void first() {

currentPage = 1L;

}

private void previous() {

currentPage--;

}

private void next() {

currentPage++;

}

private void last() {

currentPage = totalPage;

}

private void sort(String sortName) {

//设置排序状态

setPageSortState(sortName);

}

/**

* 计算总页数

* */

private Long getTotalPage(Long totalRecords) {

Long totalPage = 0L;

everyPage = everyPage == null ? 10L : everyPage;

if (totalRecords % everyPage == 0)

totalPage = totalRecords / everyPage;

else {

totalPage = totalRecords / everyPage + 1;

}

return totalPage;

}

public Long getBeginIndex() {

this.beginIndex = (currentPage - 1) * everyPage;

return this.beginIndex;

}

public void setBeginIndex(Long beginIndex) {

this.beginIndex = beginIndex;

}

public Long getCurrentPage() {

this.currentPage = currentPage == 0 ? 1 : currentPage;

return this.currentPage;

}

public void setCurrentPage(Long currentPage) {

if(0 == currentPage){

currentPage = 1L;

}

this.currentPage = currentPage;

}

public Long getEveryPage() {

this.everyPage = everyPage == 0 ? 10 : everyPage;

return this.everyPage;

}

public void setEveryPage(Long everyPage) {

this.everyPage = everyPage;

}

public Boolean getHasNextPage() {

this.hasNextPage = (currentPage != totalPage) && (totalPage != 0);

return this.hasNextPage;

}

public void setHasNextPage(Boolean hasNextPage) {

this.hasNextPage = hasNextPage;

}

public Boolean getHasPrePage() {

this.hasPrePage = currentPage != 1;

return this.hasPrePage;

}

public void setHasPrePage(Boolean hasPrePage) {

this.hasPrePage = hasPrePage;

}

public Long getTotalPage() {

return this.totalPage;

}

public void setTotalPage(Long totalPage) {

if(this.currentPage > totalPage){

this.currentPage = totalPage;

}

this.totalPage = totalPage;

}

public Long getTotalCount() {

return this.totalCount;

}

public void setTotalCount(Long totalCount) {

setTotalPage(getTotalPage(totalCount));

this.totalCount = totalCount;

}

@Override

public String toString() {

return ToStringBuilder.reflectionToString(this);

}

/**

* 设置排序状态

* */

private void setPageSortState(String newPageSortName){

//判断之前的排序字段是否为空

if(StringUtils.isEmpty(sortName)){

//默认排序为升序

this.sortState = PageUtil.ASC;

this.sortInfo = PageUtil.PAGE_ASC;

}else{

if(StringUtils.equalsIgnoreCase(newPageSortName, sortName)){

//判断sortState排序状态值

if(StringUtils.equalsIgnoreCase(sortState, PageUtil.ASC)){

this.sortState = PageUtil.DESC;

this.sortInfo = PageUtil.PAGE_DESC;

}else{

this.sortState = PageUtil.ASC;

this.sortInfo = PageUtil.PAGE_ASC;

}

}else{

//默认

this.sortState = PageUtil.ASC;

this.sortInfo = PageUtil.PAGE_ASC;

}

}

sortName = newPageSortName.toLowerCase();

}

public Boolean isSort() {

return sort;

}

public void setSort(Boolean sort) {

this.sort = sort;

}

public Long getEndinIndex() {

this.endinIndex = (currentPage) * everyPage;

return endinIndex;

}

public void setEndinIndex(Long endinIndex) {

this.endinIndex = endinIndex;

}

}

2.PageState.java

?

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
package com.cm.contract.common;

import org.apache.commons.lang.StringUtils;

/**分页状态类

* @author FENGWEI

* @date 2016-5-23

*/

public enum PageState {

/**

* 设置每页显示多少条

* */

SETPAGE,

/**

* 首页

* */

FIRST,

/**

* 向前一页

* */

PREVIOUS,

/**

* 向后一页

* */

NEXT,

/**

* 末页

* */

LAST,

/**

* 排序

* */

SORT,

/**

* 到第多少页

* */

GOPAGE;

/**

* @param value 索引名称

* @return 返回索引下标

*/

public static int getOrdinal(String value) {

int index = -1;

if (StringUtils.isEmpty(value)) {

return index;

}

String newValue = StringUtils.trim(value).toUpperCase();

try {

index = valueOf(newValue).ordinal();

} catch (IllegalArgumentException e) {}

return index;

}

}

3.PageUtil.java

?

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
/**

* 分页工具类

* @author FENGWEI

* @date 2016-5-23

*/

public class PageUtil {

public static final String ASC = "asc";

public static final String DESC = "desc";

public static final String PAGE_DESC = "↓";

public static final String PAGE_ASC = "↑";

public static final String PAGE_NULL = " ";

public static final String SESSION_PAGE_KEY = "page";

/**

* 初始化分页类

* @param initPageSql 未分页的查询SQL

* @param totalCount 总行数

* @param index 分页状态

* @param value 只有在设置每页显示多少条时,值不会NULL,其它为NULL

*/

public static Page inintPage(Long totalCount,Integer index,String value,Page sessionPage){

Page page = null;

if(index < 0){

page = new Page(totalCount);

}else{

/**每页显示多少条*/

Long everPage = null == value ? 10 : Long.parseLong(value);

/**获取Session中的分页类,方便保存页面分页状态*/

page = sessionPage;

page.setEveryPage(everPage);

page.setTotalCount(totalCount);

}

return page;

}

/**

* 当页点击:首页,前一页,后一页,末页,排序,到第多少页时进行分页操作

* @param index 分页状态

* @param value 排序字段名或者到第多少页

*/

public static Page execPage(int index,String value,Page sessionPage){

Page page = sessionPage;

/**调用方法进行分页计算*/

page.pageState(index,value);

return page;

}

}

4.DefaultController.java 此部分可以灵活使用

?

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
package com.cm.contract.common;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

import org.springframework.web.bind.annotation.ModelAttribute;

/**

* 提取公用的request和response Title:DefaultController Descrption:

*

* @author FENGWEI

* @date 2016-5-6下午3:30:32

*/

public class DefaultController {

/**

* oracel的三层分页语句 子类在展现数据前,进行分页计算!

*

* @param querySql

* 查询的SQL语句,未进行分页

* @param totalCount

* 根据查询SQL获取的总条数

* @param columnNameDescOrAsc

* 列名+排序方式 : ID DESC or ASC

*/

protected Page executePage(HttpServletRequest request, Long totalCount) {

if (null == totalCount) {

totalCount = 0L;

}

/** 页面状态,这个状态是分页自带的,与业务无关 */

String pageAction = request.getParameter("pageAction");

String value = request.getParameter("pageKey");

/** 获取下标判断分页状态 */

int index = PageState.getOrdinal(pageAction);

Page page = null;

/**

* index < 1 只有二种状态 1 当首次调用时,分页状态类中没有值为 NULL 返回 -1 2 当页面设置每页显示多少条:

* index=0,当每页显示多少条时,分页类要重新计算

* */

Page sessionPage = getPage(request);

if (index < 1) {

page = PageUtil.inintPage(totalCount, index, value, sessionPage);

} else {

page = PageUtil.execPage(index, value, sessionPage);

}

setSession(request, page);

return page;

}

private Page getPage(HttpServletRequest request) {

Page page = (Page) request.getSession().getAttribute(

PageUtil.SESSION_PAGE_KEY);

if (page == null) {

page = new Page();

}

return page;

}

private void setSession(HttpServletRequest request, Page page) {

request.getSession().setAttribute(PageUtil.SESSION_PAGE_KEY, page);

}

}

使用方法:

5,Controller.java

?

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
/**

* model 添加的分页条件

* executePage 方法写在工具类中

* @param model

*/

@Controller

public class CMLogController extends DefaultController {

@RequestMapping("index.do")

public ModelAndView userInto(ModelMap model, String username) {

nameStr = username;

model.addAttribute("username", nameStr);

// 分页数

Long totalCount = logService.pageCounts(model);

// 分页显示

Page page = executePage(request, totalCount);

if (page.isSort()) {

model.put("orderName", page.getSortName());

model.put("descAsc", page.getSortState());

} else {

model.put("orderName", "logtime");

model.put("descAsc", "desc");

}

model.put("startIndex", page.getBeginIndex());

model.put("endIndex", page.getEndinIndex());

ModelAndView mv = new ModelAndView();

// 分页查询

logList = logService.pageList(model);

mv.addObject("logList", logList);

mv.setViewName("/jsp/log");

return mv;

}}

6.maybatis中几条查询语句

?

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
//分页查询

<select id="pageList" parameterType="map" resultMap="BaseResultMap">

select ttt.* from(select tt.*,rownum rn from(select * from CM_LOG

<where>

<if test="username != null and username != ''">

<!--

特别提醒一下, $只是字符串拼接, 所以要特别小心sql注入问题。

在开发时使用: $,方便调试sql,发布时使用: #

-->

and username like '%${username}%'

</if>

<if test="type != null and type != ''">

<!--

特别提醒一下, $只是字符串拼接, 所以要特别小心sql注入问题。

在开发时使用: $,方便调试sql,发布时使用: #

-->

AND TYPE = #{type,jdbcType=VARCHAR}

</if>

</where>

order by ${orderName} ${descAsc} )tt)ttt

<where>

<if test="startIndex != null and startIndex != ''">

rn > ${startIndex}

</if>

<if test="endIndex != null and endIndex != ''">

<![CDATA[ and rn <= ${endIndex} ]]>

</if>

</where>

</select>

// 分页数

<select id="pageCounts" parameterType="map" resultType="long">

select count(*) from CM_LOG

<where>

<if test="username != null and username != ''">

and username like '%${username}%'

</if>

</where>

</select>

7.前台页面index.jsp

?

1

2

3

4

5

6

7

8

9

10

11

12
//只需在页面布局添加该div

//username 为条件

// <jsp:param name="url" value="/log/index.do?"/> 不带条件的方式 问号必须存在

<body >

<div align="right" style="height: 20">

<jsp:include page="/jsp/page.jsp">

<jsp:param name="url" value="/log/index.do?username=${username }"/>

</jsp:include>

</div>

</body >

8,引用的Page.jsp

?

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
<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<c:set var="page" value="${sessionScope.page}" />

<c:set var="path" value="${pageContext.request.contextPath}" />

<c:set var="url" value="${param.url}" />

<c:set var="urlParams" value="${param.urlParams}" />

<c:set var="pathurl" value="${path}/${url}" />

<tr>

<td colspan="5">

${urlParams }

共${page.totalCount}条记录 共${page.totalPage}页 每页显示${page.everyPage}条

当前第${page.currentPage}页

<c:choose>

<c:when test="${page.hasPrePage eq false}">

<<首页 <上页

</c:when>

<c:otherwise>

<a href="${pathurl}&pageAction=first${urlParams}"><<首页 </a>

<a href="${pathurl}&pageAction=previous${urlParams}" /><上一页</a>

</c:otherwise>

</c:choose>

||

<c:choose>

<c:when test="${page.hasNextPage eq false}">

下页> 尾页>>

</c:when>

<c:otherwise>

<a href="${pathurl}&pageAction=next${urlParams}">下一页> </a>

<a href="${pathurl}&pageAction=last${urlParams}">末页>></a>

</c:otherwise>

</c:choose>

<SELECT name="indexChange" id="indexChange"

onchange="getCurrentPage(this.value);">

<c:forEach var="index" begin="1" end="${page.totalPage}" step="1">

<option value="${index}" ${page.currentPage eq index ? "selected" : ""}>

第${index}页

</option>

</c:forEach>

</SELECT>

每页显示:<select name="everyPage" id="everyPage" onchange="setEveryPage(this.value);">

<c:forEach var="pageCount" begin="5" end="${page.totalCount}" step="5">

<option value="${pageCount}" ${page.everyPage eq pageCount ? "selected" : ""}>

${pageCount}条

</option>

</c:forEach>

</select>

</td>

</tr>

<div style='display: none'>

<a class=listlink id="indexPageHref" href='#'></a>

</div>

<script>

function getCurrentPage(index){

var a = document.getElementById("indexPageHref");

a.href = '${pathurl}&pageAction=gopage&pageKey='+index+'${urlParams}';

a.setAttribute("onclick",'');

a.click("return false");

}

function setEveryPage(everyPage){

var a = document.getElementById("indexPageHref");

var currentPage = document.getElementById('indexChange').value;

a.href = '${pathurl}&pageAction=setpage&pageKey='+everyPage+'${urlParams}';

a.setAttribute("onclick",'');

a.click("return false");

}

function sortPage(sortName){

var a = document.getElementById("indexPageHref");

a.href = '${pathurl}&pageAction=sort&pageKey='+sortName+'${urlParams}';

a.setAttribute("onclick",'');

a.click("return false");

}

</script>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持快网idc。

原文链接:http://blog.csdn.net/fiangasdre/article/details/51741456

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 springmvc 分页查询的简单实现示例代码 https://www.kuaiidc.com/119265.html

相关文章

猜你喜欢
发表评论
暂无评论