需求:针对于从数据库查询的多条数据,展示在一个页面上 分页数展示
作用:提高用户的体验度
如:
[上一页]1 2 3 4 5 6 7[下一页] 第几页/共几页
mysql数据库分页:
Selec ... from xxx limit n,m (n是查询的索引,m查询几个)
第一页:limit 0 3
第二页:limit 3 3
第三页:limit 6 3
第n页: (当前页-1)*m ,m
分页需要的数据:
1.页面展示的内容 select * from product limit (当前页-1)*m ,m
2.每页显示的条数 自己规定
3.当前页 从前台传递过去
4.总条数 select count(*) from product
5.总页数 等于 总条数/每页显示的条数 向上取整
后台实现:
封装为PageBean
1.List data; //页面展示的内容 select * from product limit n,m
2.int pageSize; //每页显示的条数 自己规定
3.int pageNumber //当前页 从前台传递过去
4.int total //总条数 select count(*) from product
5.int pageTotal //总页数 (int)Math.ceil(total*1.0/pageSize)
例子:使用PageBean实现分页查询
分页显示emp表员工姓名的ename和行号,每页显示5个,默认显示第一页。
最后一行显示当前页,总页数。
用户输入n,显示下一页的数据,如果已经是最后一页,提示用户“已经是最后一页”。
输入p,显示上一页的数据,如果是第一页,,提示用户“已经是第一页”。
如果
界面示例:
1 zs1
2 ls1
3 ww1
4 zs2
5 ls2
第1页 共3页
输入n,显示下一页的数据,输入p,显示上一页的数据
注意:分页查询的两个注意要点:
第一,获取总页数的方法:
public int getPageCount() {
return (int) Math.ceil(total*1.0/pageSize);
}
第二,limit的前一个参数,不是第几个页面,而是前面已经显示的信息条数:
所以,前一个参数应该是
(page.getPageNum() - 1) * page.getPageSize()
//(当前页-1)*(页面显示条数)
package cn.njit.entity;
public class Emp {
private String empno;
private String ename;
private String job;
private String mgr;
private float sal;
private String deptno;
public String getEmpno() {
return empno;
}
public void setEmpno(String empno) {
this.empno = empno;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public String getMgr() {
return mgr;
}
public void setMgr(String mgr) {
this.mgr = mgr;
}
public float getSal() {
return sal;
}
public void setSal(float sal) {
this.sal = sal;
}
public String getDeptno() {
return deptno;
}
public void setDeptno(String deptno) {
this.deptno = deptno;
}
public String toString() {
return empno+"\t"+ename+"\t"+sal;
}
}
-----------------------------------------------------------------------------
package cn.njit.entity;
import java.util.List;
public class PageBean<T> {
private List<T> data;
private int pageSize;//每页显示的条数
private int total;//当前查询条件下的总记录条数
private int pageNumber;//显示哪一页
public int getPageCount() {
return (int) Math.ceil(total*1.0/pageSize);
}
public List<T> getData() {
return data;
}
public void setData(List<T> data) {
this.data = data;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
public int getPageNumber() {
return pageNumber;
}
public void setPageNumber(int pageNumber) {
this.pageNumber = pageNumber;
}
}
------------------------------------------------------------------
package cn.njit.entity;
import java.sql.SQLException;
import java.util.List;
import java.util.Scanner;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import util.C3P0Utils;
public class TestFenye {
public static void main(String[] args) {
PageBean<Emp> page = new PageBean<Emp>();
int count = 0;
page.setPageNumber(1 + count);
page.setPageSize(5);
testPageBean(page);
Scanner sc = new Scanner(System.in);
String str = sc.next();
boolean tip = true;
while (tip) {
if (str.equals("n")) {
if (1 + count >= page.getPageCount()) {
count = page.getPageCount() - 1;
System.out.println("已经在最后一页");
} else {
count++;
}
} else if (str.equals("p")) {
if (1 + count <= 1) {
count = 0;
System.out.println("已经在第一页");
} else {
count--;
}
} else {
System.out.println("请重新输入");
}
page.setPageNumber(1 + count);
page.setPageSize(5);
testPageBean(page);
str = sc.next();
}
}
static void testPageBean(PageBean<Emp> page) {
QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
ScalarHandler<Long> sch = new ScalarHandler<Long>();
String str = "select count(1) from emp";
try {
Long cnt = qr.query(str, sch);
page.setTotal(cnt.intValue());
} catch (SQLException e) {
e.printStackTrace();
}
String sql = "select * from emp limit ?,?;";
int pageSize = page.getPageSize();
int begin = (page.getPageNumber() - 1) * pageSize;
Object[] o = { begin, pageSize };
BeanListHandler<Emp> bhs = new BeanListHandler<Emp>(Emp.class);
try {
List<Emp> list = qr.query(sql, bhs, o);
page.setData(list);
} catch (SQLException e) {
e.printStackTrace();
}
int count = 0;
for (Object e : page.getData()) {
count++;
System.out.println(count + "\t" + e.toString());
}
System.out.println("第" + page.getPageNumber() + "页;共" + page.getPageCount() + "页。");
System.out.println("输入n显示下一页,p返回上一页");
}
}