Java技术积累——用最原始的代码见证分页查询实现原理

关于分页查询,大家并不陌生,easyui中封装的datagrid将表格的一系列操作运用的淋漓尽致,分页查询便是其中之一。然而,我们却疏于了解分页查询的基本实现原理,它究竟是如何实现的,今天就带大家一起来探个究竟!

看一下界面的实现效果:

看似很复杂的事情,其实实现它最核心的东西有两个:

一、实现分页查询的SQL语句

select user_id,user_name,password,contact_Tel,email,create_date
from(
	select rownum rn,user_id,user_name,password,contact_tel,email,create_date
	from (
		select user_id,user_name,password,contact_tel,email,create_date
			 from t_user where user_id <> 'root' order by user_id")
	where rownum <= ? )

where rn> ? 

无论做什么这些最底层的东西还是离不开的,所以最原始的SQL语句我们还是应该了解的。

二、实现分页查询的实体

package com.bjpowernode.drp.util;

import java.util.List;

public class PageModel<E> {
	private List<E> list;//分页显示的表格所属的具体类型,用泛型来实现
	private int totalRecords; //总记录数
	private int pageSize; //每页显示的条数
	private int pageNo; //第几页
	public List<E> getList() {
		return list;
	}
	public void setList(List<E> list) {
		this.list = list;
	}
	/**
	 * 总页数
	 * */
	public int getTotalPages() {
		return (totalRecords+pageSize -1)/pageSize;
	}

	/**
	*取得首页
	*/
	public int getTopPageNo() {
		return 1;
	}

	/**
	 * 取得尾页
	 * @return
	 */
	public int getBottomPageNo(){
		return getTotalPages();
	}

	/**
	 * 上一页
	 * @return
	 */
	public int getPreviousPageNo(){
		if(pageNo<=1){
			return 1;
		}
		return pageNo-1;

	}

	public int getNextPageNo(){
		if(pageNo>=getBottomPageNo()){
			return getBottomPageNo();
		}
		return pageNo+1;
	}
	public void setTotalRecords(int totalRecords) {
		this.totalRecords = totalRecords;
	}

	public int getTotalPages(int totalRecords){
		return 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;
	}

}

以上已经把分页查询的核心介绍完了,接下来只需要我们把我们的业务逻辑和我们上面的这两个核心结合成一条线,这样,分页查询的功能就可以实现了!

三、与业务逻辑结合

业务逻辑实现:

/**
	 * 分页查询
	 * @param pageNo 第几页
	 * @param pageSize 每页多少条数据
	 * @return pageModel
	 */
	public PageModel<User> findUserList(int pageNo,int pageSize){
		StringBuffer sbSql=new StringBuffer();
		sbSql.append("select user_id,user_name,password,contact_Tel,email,create_date")
		.append(" from")
		.append("(")
		.append("select rownum rn,user_id,user_name,password,contact_tel,email,create_date")
		.append(" from")
		.append("(")
		.append("select user_id,user_name,password,contact_tel,email,create_date from t_user where user_id <> 'root' order by user_id")
		.append(") where rownum <= ? ")
		.append(") where rn> ? ");

		PageModel<User> pageModel=null;

		Connection conn=null;
		PreparedStatement pstmt=null;
		ResultSet rs=null;
		User user=null;
		try{
			conn=DbUtil.getConnection();
			pstmt = conn.prepareStatement(sbSql.toString());
			pstmt.setInt(1, pageNo * pageSize);
			pstmt.setInt(2, (pageNo - 1) * pageSize);
			//pstmt.setString(1,userId);
			rs=pstmt.executeQuery();
			List<User> userList=new ArrayList<User>();
			while(rs.next()){
				user=new User();
				user.setUserId(rs.getString("user_Id"));
				user.setUserName(rs.getString("user_name"));
				user.setPassword(rs.getString("password"));
				user.setContactTel(rs.getString("contact_Tel"));
				user.setEmail(rs.getString("email"));
				user.setCreateDate(rs.getTimestamp("create_date"));
				userList.add(user);
			}
			pageModel=new PageModel();
			pageModel.setList(userList);
			pageModel.setTotalRecords(getTotalRecords(conn));
			pageModel.setPageSize(pageSize);
			pageModel.setPageNo(pageNo);

		}catch(SQLException e){
			e.printStackTrace();
		}finally{
			//按顺序进行关闭
			DbUtil.close(rs);
			DbUtil.close(pstmt);
			DbUtil.close(conn);

		}

		return pageModel;
	}

	private int getTotalRecords(Connection conn)
	throws SQLException{
			String sql="select count(*) from t_user where user_Id <>'root'";
			PreparedStatement pstmt=null;
			ResultSet rs=null;
			int count=0;
			try{
				pstmt=conn.prepareStatement(sql);
				rs=pstmt.executeQuery();
				rs.next();
				count=rs.getInt(1);

			}finally{

				DbUtil.close(rs);
				DbUtil.close(pstmt);
			}
			return count;
	}

前端调用:

<%
	int pageNo=1;
	int pageSize=3;
	String pageNoString=request.getParameter("pageNo");
	if(pageNoString !=null){
		pageNo=Integer.parseInt(pageNoString);
	}
	PageModel<User> pageModel=UserManager.getInstance().findUserList(pageNo, pageSize);

 %>

至此,分页查询就基本上已经实现了,通过这次学习,让我再次认识了分页查询的基本实现原理,以后再用easyui封装的datagrid的时候再也不用迷茫了啊!

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-05 15:32:51

Java技术积累——用最原始的代码见证分页查询实现原理的相关文章

Java技术-0

Java程序语言 Java程序语言是一种高级编程语言,它具备如下性质: 简单 面对对象 分布式 多线程 动态 架构中立 可移植 高性能 强壮 安全 Java应用程序开发的完整过程 源代码都写在后缀名为.java的一个纯文本文件中: 通过编译器编译成.class文件--不是代码文件,而是字节码--一种JVM(Java Virtual Machine)能够识别的机器语言: 通过启动器从JVM实例中运行称程序: Java可以在不同的操作系统上运行 因为Java虚拟机可以在不同的操作系统,如MIcros

JAVA学习之 实现分页查询

分页是系统中常用到的功能,只要涉及到查询必定伴随而来的就是分页,之前也学习过关于分页的内容,例如在牛腩的新闻发布系统,之前学习的大部分都是使用了假分页,这次学习java,使用Oracle数据库来实现一下真分页. 首先来说一下实现这个分页查询的流程: 一.封装分页信息: 需要分页的部分我们首先要做的是为分页封装一个分页实体,方便返回查询信息,封装如下: /** *封装分页信息 * @author YoungJong * */ public class PageModel<E> { //结果集 p

Java技术综述

自己打算好好学习下Java,所以想先明晰Java开发中到底有哪些技术,以便以后学习的过程中,可以循序渐进,随着学习的深入,本文将不断更新. Java基础教程将Java的入门基础知识贯穿在一个实例中,逐步深入,可以帮助你快速进入Java编程的世界.万事开头难,逐步跟着这个教程走一遍,对Java应该就会有一种入门的感觉了.然后再去学习更高级的主题,或者更深入地学习其中的某些知识点. 首先学习Java的一些基础知识,包括: Java开发环境安装与配置 Eclipse的安装与使用 面向对象基础 基本数据

(转)如何学习Java技术?谈Java学习之路

51CTO编者注:这篇文章已经是有数年“网龄”的老文,不过在今天看来仍然经典.如何学习Java?本篇文章可以说也是面对编程初学者的一篇指导文章,其中对于如何学习Java的步骤的介绍,很多也适用于开发领域其他技能的学习. [在原先<学好Java之我见>的基础上重新整理而成] Java - 近10年来计算机软件发展过程中的传奇,其在众多开发者心中的地位就如“屠龙刀”.“倚天剑”. Java是个平台,我只想说说我对学好Java的一点看法,希望对初学者有所帮助. 1. 思考一下 学习Java之前,先别

java技术栈

java技术栈 1 java基础: 1.1 算法 1.1 排序算法:直接插入排序.希尔排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序 1.2 二叉查找树.红黑树.B树.B+树.LSM树(分别有对应的应用,数据库.HBase) 1.3 BitSet解决数据重复和是否存在等问题 1.2 基本 2.1 字符串常量池的迁移 2.2 字符串KMP算法 2.3 equals和hashcode 1.equals方法用于比较对象的内容是否相等(覆盖以后) 2.hashcode方法只有在集合中

Java技术与Java虚拟机

Java技术与Java虚拟机 说起Java,人们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成:Java编程语言.Java类文件格式.Java虚拟机和Java应用程序接口(Java API).它们的关系如下图所示: 图1 Java四个方面的关系 运行期环境代表着Java平台,开发人员编写Java代码(.java文件),然后将之编译成字节码(.class文件).最后字节码被装入内存,一旦字节码进入虚拟机,它就会被解释器解释执行,或者是被即时代码发生器有选择的转换成机器

Java技术的特点

Java技术是一套完整的IT行业解决方案,其中包含了很多技术.最初是从解决家电设备联网通讯的方案发展起来的,其特点适用于Internet,于是在Internet广泛应用的环境下,迅速发展成为一种计算机语言.一个平台.一个网络计算的架构. 从整体上划分,Java技术可分成Java编程语言和Java平台.Java编程语言是一种高级编程语言,Java平台是指程序运行的硬件或软件环境. Java编程语言的特征: 1.简单易用 2.面向对象 3.跨平台,可移植 4.多线程 5.健壮性 6.安全性 7.动态

【JAVA】基于MVC架构Java技术荟萃案例演练

基于JAVA-MVC技术的顾客管理项目案例总结 作者 白宁超 2016年6月9日22:47:08 阅读前瞻:本文源于对javaweb相关技术和资料汇总,涉及大量javaweb基础技术诸如:Servlet运行原理.Get/Post请求的区别.jsp的基本原理和运行框架.jsp的9大隐含对象的使用.MVC开发模式的使用.构建封装自己dao代码库.以及基于MVC的增删改查操作等:小结最后还有面向接口编程的多数据源配置与存储,以及工厂模式的使用.除此之外,后续文章会对cookie.session.Jav

JAVA技术专题综述之线程篇(1)

本文详细介绍JAVA技术专题综述之线程篇 编写具有多线程能力的程序经常会用到的方法有: run(),start(),wait(),notify(),notifyAll(),sleep(),yield(),join() 还有一个重要的关键字:synchronized 本文将对以上内容进行讲解. 一:run()和start() 示例1: public cla ThreadTest extends Thread{public void run(){for(int i=0;i<10;i++){Syste