【Java技术点滴】——分页查询

    项目中我们会经常用到分页查询的功能,总结他们的特点,可归结如下

    【Java技术点滴】——分页查询_第1张图片

    从页面开始分析,我们可以提供的参数有:

        1.每页记录数

        2.查询的页数

   

    我们需要的返回值:

    1.实体集合(每页的记录)--结果集

    2.总共记录数

    3.总共多少页

    4.当前页数

    5.每页记录数

同时我们也需要通过对页号的操作,查询出不同的数据集显示。因此有必要知道上一页、下一页、首页、尾页等的信息,而且像这样的分页查询也会很常用。针对以上需求,我们封装了专门的实体,用于将分页查询的信息统一管理使用。

/**
 * 封装分页信息
 * @author Forrest
 *
 */
public class PageModel<E> {
	//每页的记录
	private List<E> list;
	
	//总共记录数
	private int totalRecords;
	
	//每页记录数
	private int pageSize;
	
	//当前页
	private int pageNo;
	
	/**
	 * 总页数
	 * @return
	 */
	public int getTotalPages(){
		return (totalRecords + pageSize -1)/pageSize;
	}

	/**
	 * 返回首页页号
	 * @return
	 */
	public int getTopPageNo(){
		return 1;
	}
	
	/**
	 * 返回上一页页号
	 * @return
	 */
	public int getPreviousPageNo(){
		if(pageNo <= 1){
			return 1;
		}
		return pageNo - 1;
	}
	
	/**
	 * 返回下一页页号
	 * @return
	 */
	public int getNextPageNo(){
		if(pageNo >= getTotalPages()){
			return getBottomPageNo();
		}
		return pageNo + 1;
	}
	
	/**
	 * 返回尾页页号
	 * @return
	 */
	public int getBottomPageNo(){
		return getTotalPages();
	}
	
	
	public List<E> getList() {
		return list;
	}

	public void setList(List<E> list) {
		this.list = list;
	}

	public int getTotalRecords() {
		return totalRecords;
	}

	public void setTotalRecords(int totalRecords) {
		this.totalRecords = totalRecords;
	}

	public int getPageSize() {
		return pageSize;
	}

	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}

	public int getPageNo() {
		return pageNo;
	}

	public void setPageNo(int pageNo) {
		this.pageNo = pageNo;
	}
}

    对于分页查询的语句,也是有规律可以遵循的:

    三层查询嵌套

    最外层--行号限制:大于开始数据行号

    中间层--行号限制:小于等于结束数据行号

    最内层--查询出符合要求的结果集并排序

总结

通过上面简单的封装,便可以使我们的程序复用大部分分页功能的代码,封装的特性在这里得到了很好的体现,当然这些也是建立在对现实应用的观察以及一步步的抽象上的,体会到了面向对象的好处,也提醒了自己在以后的项目中努力去提取相类似的代码,将程序的实现化繁为简、灵活可控。


你可能感兴趣的:(【Java技术点滴】——分页查询)