java oracle 分页封装_分页的封装——java实现(基于oracle)

本文详细介绍了如何使用Java实现Oracle数据库的分页查询,并封装成Pagenation工具类,包括分页SQL语句、Pagenation类的详细设计以及分页原理。通过创建Pagenation类,传入当前页数、每页大小和记录总行数,计算并存储分页所需的所有信息,方便前后台交互展示分页内容。
摘要由CSDN通过智能技术生成

分页功能(Pagenation类)

分页功能的 封装 + 实现:

分页的SQL语句 + 分页工具类Pagenation的细节 + 分页原理

一、     分页的SQL语句:

select * from (selectt.*,row_number() over(order by ROWNUM ASC) rn from goods t) where rn>=? andrn<=?

Ø  goods :为表名,数据从goods中查得

Ø  第一个? :起始行号

Ø  第二个? :终点行号

二、     分页工具类Pagenation的细节:

Pagenation类:类似JavaBean的工具类,封装了分页后的细节,

主要作用:封装后台分页细节,前台调用分页细节。

简介:实例化时需要传入3个参数,然后类内部计算得到所有分页细节

注意:后期还需要调用setList()方法将分页结果也存入其中。

用法:后台用此类封装分页结果,request给前台,前台展示。

传入参数:当前页数(pageNum)+每页大小(size)+记录总行数(rowCount)

三、     分页原理:

1.    后台sevlet根据参数调用分页service()方法,返回值一个Pagenation类的对象,封装了当前要求的分页信息;

2.    service()方法处理过程:根据传入的三个参数,初始化Pagenation类,然后调用dao包下的分页查询类,返回值为一个List,将这个List也存入Pagenation对象中,返回返回该对象;

3.    返回的Pagenation对象包含了有关分页所有内容,将此对象放在request中传到前台,跳转到前台;

4.    在前台中取出Pagenation的相关信息,此时的Pagenation对象中存放着分页信息,用EL和JSTL显示分页信息。

四、     代码实现:

1.    分页工具类(核心中的核心类):

2.    其他代码:

(1)、前端展示代码:

package com.test.util;

import java.util.List;

/**

* Pagenation分页工具类:用于数据的分页

* 根据传入的pageNum参数来确定从哪页开始分页

* 根据传入的size参数确定每页分多少条记录

* 根据传入的rowCount参数来确定数据总条数

* @author Alvin Xing

*/

public class Pagenation {

/* 指定的参数 */

private int pageNum;  //当前页号

private int size;  //页面大小:每页显示多少条数据

/* DB中查找的数据 */

private long rowCount;  //数据总条数:共有多少条数据

private List list;  //数据内容

/* 由以上属性计算得到的属性 */

private int pageCount;  //页面总数

private int startRow;  //当前页面开始行,第一行为第0行

private int first = 1;  //第一页  页号

private int last;  //最后一页  页号

private int prev;  //前一页  页号

private int next;  //后一页  页号

private int startNav;  //导航栏  起始页号

private int endNav;  //导航栏 末尾页号

private int navCount = 10;  //导航栏长度  页号显示数量,最多显示numCount+1条,这里显示11页

/**

* 构造器:初始化基本的三个参数(pageNum, size, rowCount),其他参数由计算得到

*/

public Pagenation(int pageNum, int size, long rowCount) {

//初始化基本参数

this.pageNum = pageNum;

this.size = size;

this.rowCount = rowCount;

//计算得到其他参数

this.pageCount = (int)Math.ceil(this.rowCount/(double)size);

this.last = pageCount;

this.pageNum = Math.min(pageNum, pageCount);  //一般情况下pageNum会等于传入的pageNum,但当传入的pageNum如果大于页面总数,则pageNum就等于最大页面数,即最后一页的页数

this.pageNum = Math.max(1, this.pageNum);  //一般情况下pageNum会等于传入的pageNum,但当传入的pageNum如果小于1,则pageNum就等于1,即第一页的页数

this.startRow = pageNum*size - (size-1);

this.prev = (this.pageNum-1>1)?(this.pageNum-1):1;  //如果为第一页,则显示1,否则是{本页页数-1}

this.next = (this.pageNum+1为最后一页,则返回{最后一页页数},否则返回{本页数+1}

//导航处理

//this.startNav = (this.pageNum-5>1)?(this.pageNum-5):1;  //导航来开始按钮为{当前页数-5},如果当前页数不足5,则导航栏开始按钮为{第1页}按钮

this.startNav = (this.pageNum-(this.navCount/2)>1)?(this.pageNum-(this.navCount/2)):1;  //优化后的开始按钮,使当前页位于导航栏中间,开始按钮已不是{当前页数-5},而是{当前页数-导航栏总长度的一半}

this.endNav = (this.startNav+navCount

}

public Pagenation(){  //空构造器

}

/**

* Setter() and Getter()

*/

public int getPageNum() {

return pageNum;

}

public void setPageNum(int pageNum) {

this.pageNum = pageNum;

}

public int getSize() {

return size;

}

public void setSize(int size) {

this.size = size;

}

public long getRowCount() {

return rowCount;

}

public void setRowCount(long rowCount) {

this.rowCount = rowCount;

}

public List getList() {

return list;

}

public void setList(List list) {

this.list = list;

}

public int getPageCount() {

return pageCount;

}

public void setPageCount(int pageCount) {

this.pageCount = pageCount;

}

public int getStartRow() {

return startRow;

}

public void setStartRow(int startRow) {

this.startRow = startRow;

}

public int getFirst() {

return first;

}

public void setFirst(int first) {

this.first = first;

}

public int getLast() {

return last;

}

public void setLast(int last) {

this.last = last;

}

public int getPrev() {

return prev;

}

public void setPrev(int prev) {

this.prev = prev;

}

public int getNext() {

return next;

}

public void setNext(int next) {

this.next = next;

}

public int getStartNav() {

return startNav;

}

public void setStartNav(int startNav) {

this.startNav = startNav;

}

public int getEndNav() {

return endNav;

}

public void setEndNav(int endNav) {

this.endNav = endNav;

}

public int getNavCount() {

return navCount;

}

public void setNavCount(int navCount) {

this.navCount = navCount;

}

}

(2)、后台处理的servlet代码:见网盘资料

(3)、处理分页的service方法类:见网盘资料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值