前几天写了一个java web的后台分页,因为以前都是使用框架中的pagehelp 方法,自己也一直没有写过。前几天有时间,所以就自己写了一下,毕竟是个小白。分页对java web 开发来说,肯定会遇到的。今天在这边写一下,确保以后自己不会忘记。
下面写一下思路:我使用的是ssm框架,其实框架跟分页关系并不是很大,你可以用传统的servlet 也可以使用这种分页。首先我们要使用的sql语句就简单的两句。然后我们要创一个Page 的类,这个类是最重要的,这个类用于封装从数据库里查出的记录。然后传到前台 用el表达式获取数据 显示在页面就好了。
页面我就简单的写了一下,主要是为了实现功能。也没有添加任何的样式。还有一般的web项目 很多个页面都是有分页的,所以我们不能在一个页面中写死,我们可以把jsp 中的分页页面给单独抽取出来,这样的话如果其他页面要使用的话,就直接引入一下就好了。这个我就不写了。可以自己去实现一下。
select * from 表名 limit 0,10;
这个0表示从第一条数据开始取,10表示取多少条数据
select count(*) from 表名 用来查询表里面有多少条数据
下面就开始贴一下我的代码
用于封装数据
package com.runoob.proven.po;
import java.util.List;
/**
* @author
* @date 创建时间:2017年2月25日 下午3:10:02
* @version 1.0
* @parameter
* @since
* @return
*/
public class Page {
private List list;//存放数据
private int totalpage;//记住总页数
private int totalrecord; //总记录数
private int pagesize ;
private int pagenum;//代表用户想看的页码
private int startpage; //开始页
private int endpage; //结束页
//用来计算总页数
public Page(int totalrecord,int pagesize,int pagenum){
this.pagesize = pagesize;
this.totalrecord = totalrecord;
this.pagenum = pagenum;
if(this.totalrecord % this.pagesize==0){
this.totalpage=this.totalrecord/this.pagesize;
}else{
this.totalpage=this.totalrecord/this.pagesize+1;
}
if(this.pagenum-2<=0){
this.startpage=1;
}else{
this.startpage = this.pagenum -2;
}
if(this.pagenum+2>this.totalpage){
this.endpage = this.totalpage;
}else{
this.endpage =this.pagenum+2;
}
}
public int getStartpage() {
return startpage;
}
public void setStartpage(int startpage) {
this.startpage = startpage;
}
public int getEndpage() {
return endpage;
}
public void setEndpage(int endpage) {
this.endpage = endpage;
}
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
public int getTotalpage() {
return totalpage;
}
public void setTotalpage(int totalpage) {
this.totalpage = totalpage;
}
public int getTotalrecord() {
return totalrecord;
}
public void setTotalrecord(int totalrecord) {
this.totalrecord = totalrecord;
}
public int getPagesize() {
return pagesize;
}
public void setPagesize(int pagesize) {
this.pagesize = pagesize;
}
public int getPagenum() {
return pagenum;
}
public void setPagenum(int pagenum) {
this.pagenum = pagenum;
}
}
service 层
//分页处理
public Page getPageData(String pagenum,String pagesize) {
int totalrecord = userMapper.getTotalrecord();
System.out.println(pagenum+"+"+pagesize+"+"+totalrecord);
int row =Integer.parseInt(pagesize);
int pages ;
if(pagenum == null){
pages = 1;
}else{
pages = Integer.parseInt(pagenum);
}
int pageindex = (pages-1)*row;
System.out.println(pageindex+"+"+row);
Page page =new Page(totalrecord,row,pages);
List list = userMapper.getPageData(pageindex,row);
page.setList(list);
return page;
}
controller 层:用户从前台传回来 第几页 和记录数 默认的话pagenum=1 pagesize=10;
//得到页数
@RequestMapping("page")
public String getPageData(Model model,String pagenum,String pagesize) throws Exception{
if(pagesize ==null){
pagesize="10";
Page page = userService.getPageData(pagenum,pagesize);
model.addAttribute("page", page);
}else{
Page page = userService.getPageData(pagenum,pagesize);
model.addAttribute("page", page);
}
return "user/list";
}
jsp 页面
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" href="${pageContext.request.contextPath }/static/css/cssReset.css">
<title>Insert title heretitle>
<style>
input{
border:1px solid #666;
}
.table{
margin:50px auto;
text-align:center;
}
.table tr td{
width:100px;
border:1px solid black;
}
.page{
text-align:center;
margin:50px auto;
font-size:15px;
font-family:"微软雅黑";
}
style>
head>
<body>
<table class="table">
<tr>
<td>idtd>
<td>用户名td>
<td style="width:100px;">生日td>
<td>性别td>
<td>居住地td>
<td>密码td>
<td>操作td>
tr>
<c:forEach items="${page.list}" var="user">
<tr>
<td><input type="checkbox" name="items_id" value="${user.id}"/>td>
<td>${user.username }td>
<td><fmt:formatDate value="${user.birthday}" pattern="yyyy-MM-dd"/>td>
<td>${user.sex }td>
<td>${user.address }td>
<td>${user.password }td>
<td><a href="${pageContext.request.contextPath }/user/showEditUser.do?id=${user.id}">修改a>td>
tr>
c:forEach>
table>
<div class="page">
共<input type="text" size="5" value="${page.totalpage }">页
当前第<input type="text" size="5" value="${page.pagenum }">页
<a href="${pageContext.request.contextPath }/user/page.do?pagenum=${page.pagenum-1}">上一页a>
<c:forEach var="pagenum" begin="${page.startpage }" end="${page.endpage }" >
<a href="${pageContext.request.contextPath }/user/page.do?pagenum=${pagenum}">${pagenum }a>
c:forEach>
<a href="${pageContext.request.contextPath }/user/page.do?pagenum=${page.pagenum+1}">下一页a>
<input type="text" id="input1" size="5"><button onclick="goPage()">gobutton>
<script>
function goPage(){
var maxpage = ${page.totalpage};
var pagesize = document.getElementById("input1").value;
var pages = parseInt(pagesize);
if(pagesize==null||pagesize==""){
alert("页码不能为空!");
return;
}
if(!pagesize.match("\\d+")){
alert("页码只能是数字!");
return;
}
if(pagesize<1 || pages>maxpage){
alert("没有当前页码!");
return;
}
window.location.href="${pageContext.request.contextPath }/user/page.do?pagenum="+pagesize;
}
script>
div>
body>
html>
dao 层 就不贴代码了 就使用sql 语句把想要的数据查出来就好了。我想代码还是的自己写,不能全部都看别人的,这样永远也学不会。