java分页

如果数据库查询的条数太多,在一个网页不方便显示时,考虑分页,只把部分送入前台,减少了数据传输量,提高了显示速度。
Mysql分页查询 - java^avaj - 走在架构师的路上


1、后台方法:在servlet,controller或action中得到分页后的文章,送往前台

import org.apache.log4j.Logger;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.jdbc.core.JdbcTemplate;

import shown.JdbcUtil;



public class PageUtil

private static final Logger logger = Logger.getLogger(PageUtil.class);

/**

* 得到分页查询后的列表

* @param queryString 查询语句

* @param countPerPage 每页显示的记录条数

* @param pagePerShow 每页上显示的页码数

*/

public static List pagedList(HttpServletRequest request,String queryString,Integer countPerPage,Integer pagePerShow){

ApplicationContext apc=WebApplicationContextUtils.getRequiredWebApplicationContext(request.getSession().getServletContext());

JdbcTemplate jdbcTemplate=(JdbcTemplate)apc.getBean("jdbcTemplate");

String currPage=request.getParameter("PAGED_DBQUERY_CURRENT");

String totalPage=request.getParameter("PAGED_DBQUERY_TOTAL");

if (currPage==null||currPage.equals("")) {

currPage="1";//初始化当前页

}if (pagePerShow==null||pagePerShow<=2) {

pagePerShow=10;//初始化显示的页码数

}if (countPerPage==null||countPerPage<=0) {

countPerPage=10;//初始化每页显示的记录条数

}if (totalPage==null||totalPage.equals("")) {

int results=jdbcTemplate.queryForInt("select count(*) from ("+queryString+") as querytable");

int t=results%countPerPage==0?results/countPerPage:results/countPerPage+1;

totalPage=results==0?"0":t+"";

//初始化总页码,如果request没有再查询,避免每次都查询数据库,减少不必要的查询浪费

}

queryString+=" limit "+(Integer.parseInt(currPage)-1)*countPerPage+","+countPerPage;

request.setAttribute("PAGED_DBQUERY_CURRENT", currPage);

request.setAttribute("PAGED_DBQUERY_TOTAL", totalPage);

request.setAttribute("PAGED_DBQUERY_PAGEPERSHOW", pagePerShow);

logger.debug(queryString);//打印:附带了分页信息的查询语句

return jdbcTemplate.queryForList(queryString);

}

2、前台页面:在需要显示内容的网页上:

<form name="PAGED_DBQUERY_FORM" method="post" action="test.do">

<jsp:include page="/pagedDbQuery.jsp?form_name=PAGED_DBQUERY_FORM"/>

</form>



3、处理页面:pagedDbQuery.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

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



<script type="text/javascript">

function formsub(current){

var current_form=document.forms['${param.form_name}'];

current_form.action=current_form.action+'?PAGED_DBQUERY_TOTAL='+${PAGED_DBQUERY_TOTAL}+'&PAGED_DBQUERY_CURRENT='+current;

current_form.submit();

}

</script>

<div>

<%

int curpage=Integer.parseInt(request.getAttribute("PAGED_DBQUERY_CURRENT").toString()); //当前页

int total=Integer.parseInt(request.getAttribute("PAGED_DBQUERY_TOTAL").toString()); //总页码

int pagePerShow=Integer.parseInt(request.getAttribute("PAGED_DBQUERY_PAGEPERSHOW").toString())/2;//每页显示的分页数

int pre=curpage>1?curpage-1:1; //上一页

int next=curpage<total?curpage+1:total; //下一页

int begin=curpage>pagePerShow?curpage-pagePerShow:1; //分页起始页

int end=curpage+pagePerShow<total?curpage+pagePerShow:total; //分页结束页

%>

<span>共<%=total%>页</span>

<span><a href="javascript:formsub(<%=pre%>)">上一页</a></span>

<span>第</span>

<c:forEach begin="<%=begin%>" end="<%=end%>" varStatus="current">

<span><a href="javascript:formsub(<%=begin%>)"><%=begin++%></a></span>

</c:forEach>

<span>页</span>

<span><a href="javascript:formsub(<%=next%>)">下一页</a></span>

</div>



附:处理页面 pagedDbQuery.jsp 的另一种实现方式:用纯页面java代码实现

把<c:forEach>部分也换成java代码,这样页面就不用jstl了,对喜欢在jsp写脚本的弟兄们可能更舒服:

<%

for(int i=begin;i<=end;i++){

out.print("<span><a href=\"javascript:formsub("+i+")\">"+i+"</a> </span>");

}

%>



[img]http://dl.iteye.com/upload/attachment/309060/ea818093-c145-39ee-a42c-7d14e2517823.jpg[/img]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值