后台javabean
import java.util.List;
public class PageUtil {
// 当前页页码(1,2,3....)
private int pageNo;
// 每页显示条数
private int pageSize;
// 总记录(条数)
private int totalCount;
// 当前页数据集合
private List<?> data;
// 总页数
private int totalPage;
/**
* 构造方法,传递每页条数和总记录数
*
* @param 每页显示条数
* @param 总记录数
*/
public PageUtil(int pageSize, int totalCount) {
this.pageSize = pageSize;
this.totalCount = totalCount;
if (this.totalCount % this.pageSize == 0) {
// 计算总页数
this.totalPage = this.totalCount / this.pageSize;
} else {
this.totalPage = this.totalCount / this.pageSize + 1;
}
}
public List<?> getData() {
return data;
}
public void setData(List<?> data) {
this.data = data;
}
public int getPageNo() {
return pageNo;
}
public void setPageNo(int pageNo) {
this.pageNo = pageNo;
}
public int getPageSize() {
return pageSize;
}
public int getTotalCount() {
return totalCount;
}
public int getTotalPage() {
return totalPage;
}
}
sql查询语句
mysql
//startMessage从第几条开始
//pageSize每页显示的数据量
select * from table limit #{startMessage},#{pageSize}
sqlserver
//原理:子查询查到当前页之前的页的所有数据,将除了之前的所有数据当作一个整体进行select top查询,查询量为每页要显示的数据量
//pageNo当前页数减
//pageSize每页显示的数据量
SELECT TOP #{pageSize} * FROM items where id not in(select top(#{pageSize}*#{pageNo-1}) id from items)
后台action
@WebServlet("/itemsList.do")
public class itemsListServlet extends HttpServlet {
private Dao dao;
protected void service(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
int pageNo = Integer.parseInt(request.getParameter("pageNo"));
int pageSize = Integer.parseInt(request.getParameter("pageSize"));
dao = new Dao();
//获得总记录数
String sql3 = "select count(*)'count' from items";
List<Map<String, Object>> count = dao.exucteQuery(sql3);
int totalCount = (int)count.get(0).get("count");
dao = new Dao();
PageUtil page = new PageUtil(pageSize, totalCount);
//分页查询
String sql4 = "SELECT TOP "+pageSize+" * FROM items where id not in(select top("+pageSize+"*"+(pageNo-1)+") id from items)";
List<Map<String, Object>> items = dao.exucteQuery(sql4);
List<Items> itemsList = new ArrayList<Items>();
for(Map<String, Object> ind : items){
Items item = new Items();
item.setItem_id(Integer.parseInt(ind.get("id")+""));
item.setItem_name(ind.get("name")+"");
item.setItem_price(Float.parseFloat(ind.get("price")+""));
item.setItem_detail(ind.get("detail")+"");
itemsList.add(item);
}
//将数据存到page对象中
page.setPageNo(pageNo);
page.setData(itemsList);
request.setAttribute("page", page);
request.getRequestDispatcher("itemsList.jsp").forward(request, response);
}
}
jsp页面
所有的href为:action?+查询条件
<tr>
<td class="altbg2" colspan="7" rowspan="2" align="center">
总共【${page.totalPage}】页
${page.pageNo}/${page.totalPage} <a
href="${pageContext.request.contextPath }/itemsList.do?pageNo=1&pageSize=${page.pageSize }">首页</a> <c:choose>
<c:when test="${requestScope.page.pageNo > 1}">
<a href="${pageContext.request.contextPath }//itemsList.do?pageNo=${page.pageNo-1}&pageSize=${page.pageSize }">上一页</a>
</c:when>
<c:otherwise>
上一页
</c:otherwise>
</c:choose> <c:choose>
<c:when test="${page.pageNo < page.totalPage}">
<a href="${pageContext.request.contextPath }/itemsList.do?pageNo=${page.pageNo+1}&pageSize=${page.pageSize }">下一页</a>
</c:when>
<c:otherwise>
下一页
</c:otherwise>
</c:choose> <a href="${pageContext.request.contextPath }/itemsList.do?pageNo=${page.totalPage}&pageSize=${page.pageSize }">尾页</a>
每页显示
<input type="text"
value="${page.pageSize }" name="pageSize">条
<input type="button" value="确定" onclick="chage()">
</td>
</tr>
//js代码
<script language="javascript">
function chage(){
this.document.addItem.action = "${pageContext.request.contextPath }/itemsList.do?pageNo=1";
document.addItem.submit();
return true;
}
</script>