分页的原理 :
client:
用户在页面上选择需要浏览的页面,并且将当前选择的页码pageNo和预期每页显示的数量pageSize传递到服务器。
server:
1、服务器接受到数据之后 计算出数据的总记录数量
2、并且根据 用户传递过来的pageNo和pageSize结合总数据量 计算出服务器对应的数据量
3、数据库返回查询的结果。
4、服务器将分页结果(当前分页数记录、上一页、下一页、总数据量)传递给用户。
/** * 用户运行 */ public static void client() { for (int i = 1; i < 10; i++) { System.out.println(); System.out.println("-----start------"); System.out.println("选择的参数: "); int pagNo = i; int pagSize = 50; System.out.println("用户选择第:" + pagNo + "页"); System.out.println("在选择页中 用户想查询的数据量:" + pagSize + "条"); // 调用服务器 Map map = server(pagNo, pagSize); if (map != null) { System.out.println("当前是:" + map.get("pageNo") + "页"); System.out.println("上一页:" + map.get("prePage")); System.out.println("下一页:" + map.get("nextPage")); System.out.println("最后一页:" + map.get("totalPage")); System.out.println("总数据量:" + map.get("totalCount")); } else { System.out.println("没有第"+pagNo+" 页面 ,对不起不能查询了 "); } System.out.println(); System.out.println("---------end--------"); } }
模拟一个客户端 将 pagNo和pagSize两个参数 传递给服务器
/** * 服务器分页 * * @param pagNo * 当前选择的页 * @param pagSize * 当前页需要获取的数据量 * @param count * 从数据量 */ public static Map server(int pagNo, int pagSize) { // 1 计算这张表中总数据量(假设是 34条 一般就是查询count(*) 不带分页的值) int count = 34; Pagination pg = new Pagination(-1, pagSize, count); System.out.println(); System.out.println("--server运行----"); if (pagNo > pg.getTotalPage()) { return null; } // 2、将下面两个参数 传到数据库 System.out.println("在数据表需要的参数: "); System.out.println("开始索引:" + pg.getFirstResult()); System.out.println("在数据表中 当前需要获取的数据量:" + pg.getPageSize()); System.out.println(); // 程序完毕之后需要获取的数据 System.out.println("在数据表中 当前实际获取的数据量:" + pg.getTotal()); System.out.println("总数据量:" + pg.getTotalCount()); System.out.println(); Map map = new HashMap(); map.put("pageNo", pg.getPageNo()); map.put("prePage", pg.getPrePage()); map.put("nextPage", pg.getNextPage()); map.put("totalPage", pg.getTotalPage()); map.put("totalCount", pg.getTotalCount()); return map; }
服务器接收后进行处理传递给客户端。