Jsp学习笔记(4)——分页查询
程序员文章站
2023-11-26 09:53:04
核心sql 大体思路 使用Page类封装(Page当做Dao类中某个方法的参数,Dao类中需要有个方法来获得获得满足条件的记录总数 每次点击查询,重新获得总记录数 首次进入某个需要显示分页的jsp页面,先创建一个Page对象,设置页号为第一页,并同时使用当前的这个Page,从Dao类中查询,得到第一 ......
核心sql
i是第几页,itemnum是每页显示的数据条数 select * from ( select e.*,rownum rn from ( select * from employee where 1=1 order by empno) e where rownum <(i*itemnum)) 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对象中的数据 <a href="query.jsp?pageno=${page.pageno}"></a>
<tr > <td colspan="2"></td> <td colspan="5"> <c:if test="${not employeepage.first}"> <a href="doquery.jsp?pageno=1">首页</a> </c:if> <c:if test="${employeepage.previous}"> <a href="doquery.jsp?pageno=${employeepage.prevno}">上一页</a> </c:if> <%--如果有下一页,就显示下一页的链接 --%> <c:if test="${employeepage.next}"> <a href="doquery.jsp?pageno=${employeepage.nextno}">下一页</a> </c:if> <c:if test="${not employeepage.last}"> <a href="doquery.jsp?pageno=${employeepage.totalpage}">尾页</a> </c:if> </td> <td> <span>当前第${employeepage.pageno}页/总共${employeepage.totalpage}页</span> </td> </tr>
page类代码
/** * 分页控制类,封装了相关分页时所需的信息,包括:<br> * <pre> * pageno - 页号 * pagesize - 每页显示记录数 * totalrow - 总行数 * totalpage - 总页数 * previous - 是否有上一页 * next - 是否有下一页 * first - 是否是每一页 * last - 是否是最后一页 * firstindex -当前页号的开头索引 如页号为2,每页显示记录数为5,当前的页号的开头索引为6 * lastindex -当前页号的末尾索引 如页号为2,每页显示记录数为5,当前的页号的末尾索引为10 * </pre> * * @param <t> 查询条件对象。map 或者 pojo * @author starsone * <p> * pagesize=10; * 1页: 第1~10条记录 * 2页: 第11~20第记录 * ..... * 【第一页】【上一页】【下一页】【最后一页】 * page<book> page = new page<book>(); */ public class page<t> { //预定常量:每页的行数 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; //是否有上一页 <c:if test=“${sessionscope.page.previous}”> </c:if> 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<employee> page = new page<employee>(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
上一篇: 电脑声音异常或没有声音是怎么回事如何解决
下一篇: 企业网站推广小妙招:话题推广