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

本文介绍了如何使用Java实现Oracle数据库的分页查询,包括分页SQL语句的编写,以及自定义的Pagenation类的详细说明。Pagenation类用于封装分页的相关信息,如当前页数、每页大小、总行数等,并提供了计算导航栏页号等功能,便于在前端展示分页效果。
摘要由CSDN通过智能技术生成

分页功能(Pagenation类)

分页功能的 封装 + 实现:

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

1、     分页的SQL语句:

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

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

?  第1个? :起始行号

?  第2个? :终点行号

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

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

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

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

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

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

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

3、     分页原理:

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

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

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

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

4、     代码实现:

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;  //当前页面开始行,第1行动第0行

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

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

private int prev;  //前1页  页号

private int next;  //后1页  页号

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

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

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

/**

* 构造器:初始化基本的3个参数(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);  //1般情况下pageNum会等于传入的pageNum,但当传入的pageNum如果大于页面总数,则pageNum就等于最大页面数,即最后1页的页数

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

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

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

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

//导航处理

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

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

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方法类:见网盘资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值