java 条件分页 笔记,Jsp学习笔记(4)——分页查询

核心sql

i是第几页,itemnum是每页显示的数据条数

select * from (

select e.*,rownum rn from (

select * from employee where 1=1 order by empno) e where rownum

where rn >(i-1)*itemnum

大体思路

使用page类封装(page当做dao类中某个方法的参数,dao类中需要有个方法来获得获得满足条件的记录总数

每次点击查询,重新获得总记录数

首次进入某个需要显示分页的jsp页面,先创建一个page对象,设置页号为第一页,并同时使用当前的这个page,从dao类中查询,得到第一页的list数据,使用session.setattribute()方法,把page对象和list数据存入到session中

第二次则是将pageno的请求参数获得,把session中的page对象取出,设置pageno,之后再使用这个page,从dao类中获得新的一页的list数据,把page对象和list数据再次存入session中

之后,为分页按钮设置好href链接(上一页,下一页,最后一页,a标签定义herf,带上页号的参数 query.jsp?pageno=?

//使用el表达式读取page对象中的数据

首页

上一页

下一页

尾页

当前第${employeepage.pageno}页/总共${employeepage.totalpage}页

page类代码

/**

* 分页控制类,封装了相关分页时所需的信息,包括:

*

 
 

* pageno - 页号

* pagesize - 每页显示记录数

* totalrow - 总行数

* totalpage - 总页数

* previous - 是否有上一页

* next - 是否有下一页

* first - 是否是每一页

* last - 是否是最后一页

* firstindex -当前页号的开头索引 如页号为2,每页显示记录数为5,当前的页号的开头索引为6

* lastindex -当前页号的末尾索引 如页号为2,每页显示记录数为5,当前的页号的末尾索引为10

*

*

* @param 查询条件对象。map 或者 pojo

* @author starsone

*

* pagesize=10;

* 1页: 第1~10条记录

* 2页: 第11~20第记录

* .....

* 【第一页】【上一页】【下一页】【最后一页】

* page page = new page();

*/

public class page {

//预定常量:每页的行数

public static final int r5 = 5;

public static final int r10 = 10;

public static final int r20 = 20;

public static final int r50 = 50;

public static final int r100 = 100;

public static final int default_size = r10;

//总行数

private int totalrow = 0;

//当前页号

private int pageno = 1;

//每页的记录数

public int pagesize = default_size;

//总页数

private int totalpage = 0;

//是否有上一页

private boolean previous;

//是否有下一页

private boolean next;

//是否是第一页

private boolean first;

//是否是最后一页

private boolean last;

//当前页数据首条记录索引 每页10, 当前2页:11~20

private int firstindex;

//当前页数据最后条记录索引

private int lastindex;

//查询条件对象

private t queryobject;

public page() {

this(0);

}

/**

* @param totalrow 总记录数

*/

public page(int totalrow) { // 101

this(totalrow, default_size);

}

/**

* @param totalrow 总记录数

* @param pagesize 每页记录数

*/

public page(int totalrow, int pagesize) {

this.totalrow = totalrow;

this.pagesize = pagesize;

//根据记录数自动算出总页数

if (totalrow % pagesize == 0) {

this.totalpage = totalrow / pagesize;

} else {

this.totalpage = totalrow / pagesize + 1;

}

}

/**

* @param queryobject 查询条件

*/

public page(t queryobject, int pagesize, int totalrow) {

this.queryobject = queryobject;

this.totalrow = totalrow;

this.pagesize = pagesize;

//根据记录数自动算出总页数

if (totalrow % pagesize == 0) {

this.totalpage = totalrow / pagesize;

} else {

this.totalpage = totalrow / pagesize + 1;

}

}

/**

* @param totalrow 总记录数

* @param queryobject 查询条件

*/

public page(int totalrow, t queryobject) {

settotalrow(totalrow);

this.queryobject = queryobject;

}

/**

* 得到总记录数

*

* @return

*/

public int gettotalrow() {

return totalrow;

}

/**

* @param totalrow

*/

public void settotalrow(int totalrow) {

this.totalrow = totalrow;

}

/**

* 得到当前的页号

*

* @return

*/

public int getpageno() {

return pageno;

}

/**

* 得到下一页的页号

*

* @return

*/

public int getnextno() {

if (this.getnext()) {

return pageno + 1;

} else {

return totalpage;

}

}

/**

* 得到上一页的页号

*

* @return

*/

public int getprevno() {

if (this.getprevious()) {

return pageno - 1;

} else {

return pageno;

}

}

public void setpageno(int pageno) {

this.pageno = pageno;

}

/**

* 得到每页显示的记录数

*

* @return

*/

public int getpagesize() {

return pagesize;

}

public void setpagesize(int pagesize) {

this.pagesize = pagesize;

}

/**

* 得到总页数

*

* @return

*/

public int gettotalpage() {

if (totalrow % pagesize == 0) {

this.totalpage = totalrow / pagesize;

} else {

this.totalpage = totalrow / pagesize + 1;

}

return totalpage;

}

public void settotalpage(int totalpage) {

this.totalpage = totalpage;

}

/**

* 是否有下一页

*

* @return

*/

public boolean getnext() {

if (pageno == 1 && pageno < gettotalpage()) {

return true;

}

if (pageno > 1 && pageno < gettotalpage()) {

return true;

} else {

return false;

}

}

/**

* 是否有上一页

*

* @return

*/

public boolean getprevious() {

if (getpageno() > 1) {

return true;

} else {

return false;

}

}

/**

* 是否是第一页

*

* @return

*/

public boolean getfirst() {

return (getpageno() > 1 ? false : true);

}

/**

* 是否是最后一页

*

* @return

*/

public boolean getlast() {

return (getpageno() == gettotalpage() ? true : false);

}

/**

* 得到本页数据首条记录索引

*

* @return

*/

public int getfirstindex() {

int i = getpageno(); //pageno = 3

return ((i < 1 ? 1 : i) - 1) * getpagesize() + 1;

}

/**

* 得到本页数据最后一条记录索引

*

* @return

*/

public int getlastindex() {

return getfirstindex() + this.getpagesize() - 1;

}

/**

* 得到查询分页的条件

*

* @return

*/

public t getqueryobject() {

return queryobject;

}

/**

* 设置查询分页的条件

*

* @return

*/

public void setqueryobject(t queryobject) {

this.queryobject = queryobject;

//this.totalrow = new employeedao().countforquery(((employee) queryobject));

//根据记录数自动算出总页数

if (totalrow % pagesize == 0) {

this.totalpage = totalrow / pagesize;

} else {

this.totalpage = totalrow / pagesize + 1;

}

}

// 便于调试

@override

public string tostring() {

return "page [是否是第一页:" + getfirst()

+ ", 是否是最后页:" + getlast()

+ ", 是否有上一页:" + getprevious()

+ ", 是否有下一页:" + getnext()

+ ", 当前的页号:" + getpageno()

+ ", 每页记录数:" + getpagesize()

+ ",开始索引:" + getfirstindex()

+ ",末尾索引:" + getlastindex()

+ ", 总页数=" + gettotalpage()

+ ", 总记录数=" + gettotalrow() + "]";

}

}

使用范例

/* public static void main(string[] args) {

// 模拟页页提交的查询条件

employee emp = new employee();

page page = new page(13);

// 设置(保存)查询条件

page.setqueryobject(emp);

//设置 默认每页显示的记录数

page.setpagesize(page.r5);

// 设置当前页号

page.setpageno(3);

system.out.println(page);

// session.setattribute("emppage", page);

}*/

select * from (select e.*,rownum rn from (select * from emploee where order by empno) where rownum <= (i*itemnum) ) where rn >(i-1)*itemnum

希望与广大网友互动??

点此进行留言吧!

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值