实现Java Web项目分页功能

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/GavinLi2588/article/details/79755709

接触Java技术以来,项目中实现分页功能一直以来是一大纠结点。近日终归算是下定决心研究一下其中的原理了喽~~~

本次主要研究分页功能实现原理,所以没有使用任何框架技术,通过简单的Servlet、jsp连接MySQL数据库来实现。

一、准备工作:

1. 在MySQL数据库中创建数据表,并添加足够分页的数据。

2. 使用MyEclipse创建JavaWeb项目。

3. 创建实体类、工具类、DAO、Service、Servlet等,这写常规东西在这里均省略掉。

二、分析、实现分页功能:

1. 通过查询MySQL数据库实现分页的sql语句为:select * from 表名 limit  起始行 , 每页显示行数。

2. 页面显示页面信息包括:总页数、当前页数;

    页面显示可操作内容包括:首页、尾页、上一页、下一页的跳转,以及输入页码,提交后跳转到指定页。

3. 实现分页功能所必须的几个重要参数:

    * pageSize        // 每页所显示的数据条数    --- 根据情况自行定义

    * totalRow       // 数据表中记录数据的总行数    --- 通过查询数据表获得

    * totalPage      //分页后的总页数,即数据表中数据共可以分多少页    --- 通过计算获得

    * currentPage   //当前页码    --- 根据判断,并计算而获得

    * rowNum        //每页起始行在数据表中的行数

4. 分析以上参数的获取方式:

    (1) pageSize,每页所显示的数据条数,这个是根据自己项目情况自己设定的。

    (2) totalRow,数据表中记录数据的总行数,可以通过“SELECT COUNT(*) FROM 表名”进行查询。

    (3) totalPage,分页后的总页数,通过“totalRow/pageSize”计算获得;

            总页数的计算结果有两种情况:

            ① 总数据分页后正好为整页:

                totalPage = totalRow/pageSize;

            ② 总数据分页后不是整页:

                totalPage = totalRow/pageSize+1;

    (4) currentPage,当前页码,情况较为复杂,需分两种情况:

             第一页的内容是通过点击查询链接,直接获取的;而从第二页开始,后面各页内容均是通过点击自身页面的翻页链接获取的,currentPage的值可以通过链接传输参数,从页面传递给后台。所以该值需要通过判断来确定:

            ① 当访问第一页时,设定currentPage = 1;

            ② 当访问第二页之后时,currentPage的值可以通过request.getParameter("currentPage"),从页面获取,对应的页面代码为:

<a href="EmployeesServlet/queryAll.do?pageNo=<%=Integer.parseInt(request.getAttribute("pageNo").toString())-1 %>">上一页</a>
<a href="EmployeesServlet/queryAll.do?pageNo=<%=Integer.parseInt(request.getAttribute("pageNo").toString())+1 %>">下一页</a>

        对应后台的判断代码如下:

String page= request.getParameter("page");        // 从页面接收参数page
if(page == null || page.trim() == 0{              // 当没有接收到page参数时,即访问第一页时查询链接并没有传入参数page
   page = "1";                                    // 设定page的值为1
}
int currentPage = Integer.parseInt(page);         // 将String类型的page参数转换为int类型的currentPage
if(currentPage < 1){                              // 若当前页数小于1(在第一页时点击上一页,这里的值会为0、-1、-2......)
   currentPage = 1                                // 设定currentPage的值为1
}
if(currentPage > totalPage){                      // 若当前页数大于总页数(在最后一页点击下一页,这里的值会为totalPage+1......)
   currentPage = totalPage;                       // 设定currentPage的值为总页数
}

    (5) rowNum,每页起始行在数据表中的行数,其值可通过如下公式进行计算获得:

int rowNum = (currentPage - 1) * pageSize;

5. 分页功能实现过程:                                                                                                                             


6.  点击链接或按钮查询“首页”、“尾页”、指定页数据:

    ① “首页”链接实现:

<a href="EmployeesServlet/queryAll.do?">首页</a>

    ② “尾页”链接实现:

<a href="EmployeesServlet/queryAll.do?page=<%=request.getAttribute("totalPage") %>">尾页</a>

    ③  指定页数据查询:

    页面代码:

调转到<input id="in">页 <input type="button" value="跳转" onclick="submit()">

    js代码:

    <script type="text/javascript">
    	function submit(){
    		var page = document.getElementById("in").value;
    		window.location.href="EmployeesServlet/queryAll.do?page="+page;
    	}
    </script>
三、附上其他 常见数据库分页查询语句
1.oracle数据库分页
    select * from (select a.*,rownum rc from 表名 where rownum<=endrow) a where a.rc>=startrow

2.DB2数据库分页
    Select * from (select rownumber() over() as rc,a.* from (select * from 表名 order by列名) as a) where rc between startrow and endrow

3.SQL Server 2000数据库分页
    Select top pagesize * from 表名 where 列名 not in(select top pagesize*page 列名 from 表名 order by列名) order by列名

4.SQL Server 2005数据库分页
    Select * from (select 列名,row_number() over(order by 列名1) as 别名from 表名) as t where t.列名1>=startrow and t.列名1<=endrow

5.MySQL数据库分页
    Select * from 表名 limit startrow,pagesize
    (Pagesize为每页显示的记录条数)

6.PostgreSQL数据库分页
    Select * from 表名 limit pagesize,offset startrow
    (Pagesize为每页显示的记录条数)


猜你喜欢

转载自blog.csdn.net/GavinLi2588/article/details/79755709
今日推荐