DBUtils例子2_实现分页查询

需求:针对于从数据库查询的多条数据,展示在一个页面上 分页数展示
作用:提高用户的体验度
如:
[上一页]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返回上一页");
	}
}

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/AirTrioa/article/details/83116753