1. 程式人生 > >DBUtils例子2_實現分頁查詢

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返回上一頁");
	}
}

在這裡插入圖片描述
在這裡插入圖片描述