java-SSH2实现数据库和界面的分页
程序员文章站
2024-03-12 21:19:38
分页应该是在我们开发web应用时经常要做的工作,能够比较简洁的实现数据库和视图层的分页十分重要。
在数据库层利用hibernate进行数据库的分页,将从数据库中查询出...
分页应该是在我们开发web应用时经常要做的工作,能够比较简洁的实现数据库和视图层的分页十分重要。
在数据库层利用hibernate进行数据库的分页,将从数据库中查询出的数据封装为javabean;在视图层就可以方便的实现分页。
创建pagebean
package com.fishing.common.bean; import java.util.list; @suppresswarnings("unchecked") public class pagebean { private list list; // 要返回的某一页的记录列表 private int allrow; // 总记录数 private int totalpage; // 总页数 private int currentpage; // 当前页 private int pagesize; // 每页记录数 private boolean isfirstpage; // 是否为第一页 private boolean islastpage; // 是否为最后一页 private boolean haspreviouspage; // 是否有前一页 private boolean hasnextpage; // 是否有下一页 public list getlist() { return list; } public void setlist(list list) { this.list = list; } public int getallrow() { return allrow; } public void setallrow(int allrow) { this.allrow = allrow; } public int gettotalpage() { return totalpage; } public void settotalpage(int totalpage) { this.totalpage = totalpage; } public int getcurrentpage() { return currentpage; } public void setcurrentpage(int currentpage) { this.currentpage = currentpage; } public int getpagesize() { return pagesize; } public void setpagesize(int pagesize) { this.pagesize = pagesize; } /** */ /** * 初始化分页信息 */ public void init() { this.isfirstpage = isfirstpage(); this.islastpage = islastpage(); this.haspreviouspage = ishaspreviouspage(); this.hasnextpage = ishasnextpage(); } /** */ /** * 以下判断页的信息,只需getter方法(is方法)即可 * * @return */ public boolean isfirstpage() { return (currentpage == 1);// 如是当前页是第1页 } public boolean islastpage() { return currentpage == totalpage; //如果当前页是最后一页 } public boolean ishaspreviouspage() { return currentpage != 1; //只要当前页不是第1页 } public boolean ishasnextpage() { return currentpage != totalpage; //只要当前页不是最后1页 } /** */ /** * 计算总页数,静态方法,供外部直接通过类名调用 * * @param pagesize * 每页记录数 * @param allrow * 总记录数 * @return 总页数 */ public static int counttotalpage(final int pagesize, final int allrow) { int totalpage = allrow % pagesize == 0 ? allrow / pagesize : allrow / pagesize + 1; return totalpage; } /** */ /** * 计算当前页开始记录 * * @param pagesize * 每页记录数 * @param currentpage * 当前第几页 * @return 当前页开始记录号 */ public static int countoffset(final int pagesize, final int currentpage) { final int offset = pagesize * (currentpage - 1); return offset; } /** */ /** * 计算当前页,若为0或者请求的url中没有"?page=",则用1代替 * * @param page * 传入的参数(可能为空,即0,则返回1) * @return 当前页 */ public static int countcurrentpage(int page) { final int curpage = (page == 0 ? 1 : page); return curpage; } }
在dao的抽象接口basedao中添加方法:
public list queryforpage(final string hql, final int offset, final int length); 在dao的实现类jianshedwdaoimpl中实现方法 public list queryforpage(final string hql, final int offset, final int length) { list list = gethibernatetemplate().executefind(new hibernatecallback() { public object doinhibernate(session session) throws hibernateexception, sqlexception { query query = session.createquery(hql); query.setfirstresult(offset); query.setmaxresults(length); list list = query.list(); return list; } }); return list; }
在service抽象层接口jianshedwservice中添加方法:
public pagebean queryforpage(int pagesize,int currentpage);
在service实现类中实现方法:
public pagebean queryforpage(int pagesize, int page) { final string hql = "from jianshedwbean"; // 查询语句 int allrow = this.basedao.getallrowcount(hql); // 总记录数 int totalpage = pagebean.counttotalpage(pagesize, allrow); // 总页数 final int offset = pagebean.countoffset(pagesize, page); // 当前页开始记录 final int length = pagesize; // 每页记录数 final int currentpage = pagebean.countcurrentpage(page); list<jianshedwbean> list = this.basedao.queryforpage(hql, offset, length); // "一页"的记录 // 把分页信息保存到bean中 pagebean pagebean = new pagebean(); pagebean.setpagesize(pagesize); pagebean.setcurrentpage(currentpage); pagebean.setallrow(allrow); pagebean.settotalpage(totalpage); pagebean.setlist(list); pagebean.init(); return pagebean; }
在视图层action中建立分页模型
package com.fishing.action.lcq; import com.fishing.common.bean.jianshedwbean; import com.fishing.common.bean.pagebean; import com.fishing.service.lcq.jianshedwservice; import com.opensymphony.xwork2.actionsupport; @suppresswarnings("serial") public class getinfojsdwlistaction extends actionsupport { private int page; // 第几页 private pagebean pagebean; // 包含分布信息的bean private jianshedwbean jianshedwbean; // private pagebean page; private jianshedwservice jianshedwservice; public int getpage() { return page; } public void setpage(int page) { this.page = page; } public pagebean getpagebean() { return pagebean; } public void setpagebean(pagebean pagebean) { this.pagebean = pagebean; } public jianshedwbean getjianshedwbean() { return jianshedwbean; } public void setjianshedwbean(jianshedwbean jianshedwbean) { this.jianshedwbean = jianshedwbean; } public jianshedwservice getjianshedwservice() { return jianshedwservice; } public void setjianshedwservice(jianshedwservice jianshedwservice) { this.jianshedwservice = jianshedwservice; } @override public string execute() throws exception { //分页的pagebean,参数pagesize表示每页显示记录数,page为当前页 this.pagebean = jianshedwservice.queryforpage(10, page); return success; } }
在jsp中编写分页
<tr class="odd"> <td> </td> <td> <s:if test="%{pagebean.currentpage == 1}"> 首页 上一页 </s:if> <s:else> <a href="jianguan/getjsdwinfos.action?page=1">首页</a> <a href="jianguan/getjsdwinfos.action?page=<s:property value="%{pagebean.currentpage-1}"/>" />上一页</a> </s:else> </td> <td> <s:if test="%{pagebean.currentpage != pagebean.totalpage}"> <a href="jianguan/getjsdwinfos.action?page=<s:property value="%{pagebean.currentpage+1}"/>">下一页</a> <a href="jianguan/getjsdwinfos.action?page=<s:property value="pagebean.totalpage"/>">尾页 </a> </s:if> <s:else> 下一页 尾页 </s:else> </td> <td> <div align="center"> 页次 <s:property value="pagebean.currentpage" /> / <s:property value="pagebean.totalpage" /> 共 <s:property value="pagebean.allrow" /> 记录 </div> <div align="center"></div> </td> </tr>
上面只是代码的实现,没有说明配置文件的配置,读者根据情况配置。
希望本文所述对你有所帮助,ssh2实现数据库和界面的分页内容就给大家介绍到这里了。希望大家继续关注我们的网站!想要学习java可以继续关注本站。