Hibernate+Spring+Struts2整合开发中的一个分页显示方案_第1页
Hibernate+Spring+Struts2整合开发中的一个分页显示方案_第2页
Hibernate+Spring+Struts2整合开发中的一个分页显示方案_第3页
Hibernate+Spring+Struts2整合开发中的一个分页显示方案_第4页
Hibernate+Spring+Struts2整合开发中的一个分页显示方案_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Hibernate+Spring+Struts2整合开发中的一个分页显示方案 分页显示一直是web开发中一大烦琐的难题,传统的网页设计只在一个JSP或者ASP页面中书写所有关于数据库操作的代码,那样做分页可能简单一点,但当把网站分层开发后,分页就比较困难了,下面是我做Spring+Hibernate+Struts2项目时设计的分页代码,与大家分享交流。1、DAO层接口的设计,在MemberDao接口中定义了如下两个方法:publicinterfaceMemberDao/省略了其他的代码/*/*分页查询*paramhql查询的条件*paramoffset开始记录*paramlength一次查询几

2、条记录*return*/publicListqueryForPage(finalStringhql,finalintoffset,finalintlength);/*/*查询所有记录数*paramhql查询的条件*return总记录数*/publicintgetAllRowCount(Stringhql);2、DAO层实现类MemberDaoImpl对上面两个方法的实现如下:publicclassMemberDaoImplextendsHibernateDaoSupportimplementsMemberDao/省略了其他的代码/*/*分页查询*paramhql查询的条件*paramoffse

3、t开始记录*paramlength一次查询几条记录*return*/publicListqueryForPage(finalStringhql,finalintoffset,finalintlength)Listlist=getHibernateTemplate().executeFind(newHibernateCallback()publicObjectdoInHibernate(Sessionsession)throwsHibernateException,SQLExceptionQueryquery=session.createQuery(hql);query.setFirstResu

4、lt(offset);query.setMaxResults(length);Listlist=query.list();returnlist;);returnlist;/*/*查询所有记录数*return总记录数*/publicintgetAllRowCount(Stringhql)returngetHibernateTemplate().find(hql).size(); 细心的读者会发现,这个类继承了HibernateDaoSupport类,HibernateDaoSupport是Spring提供的对Hibernate支持的类,getHibernateTemplate().execute

5、Find(new HibernateCallback().)方法中的参数,我们使用了接口回调,在其参数内,我们能像原生的Hibernate一样调用query.setFirstResult(offset)和query.setMaxResults(length)来实现分页查询功能。3、下面我们来新建一个保存分页信息的类PageBean,具体代码如下:publicclassPageBeanprivateListlist;/要返回的某一页的记录列表privateintallRow;/总记录数privateinttotalPage;/总页数privateintcurrentPage;/当前页privat

6、eintpageSize;/每页记录数privatebooleanisFirstPage;/是否为第一页privatebooleanisLastPage;/是否为最后一页privatebooleanhasPreviousPage;/是否有前一页privatebooleanhasNextPage;/是否有下一页publicListgetList()returnlist;publicvoidsetList(Listlist)this.list=list;publicintgetAllRow()returnallRow;publicvoidsetAllRow(intallRow)this.allRo

7、w=allRow;publicintgetTotalPage()returntotalPage;publicvoidsetTotalPage(inttotalPage)this.totalPage=totalPage;publicintgetCurrentPage()returncurrentPage;publicvoidsetCurrentPage(intcurrentPage)this.currentPage=currentPage;publicintgetPageSize()returnpageSize;publicvoidsetPageSize(intpageSize)this.pag

8、eSize=pageSize;/*/*初始化分页信息*/publicvoidinit()this.isFirstPage=isFirstPage();this.isLastPage=isLastPage();this.hasPreviousPage=isHasPreviousPage();this.hasNextPage=isHasNextPage();/*/*以下判断页的信息,只需getter方法(is方法)即可*return*/publicbooleanisFirstPage()returncurrentPage=1;/如是当前页是第1页publicbooleanisLastPage()r

9、eturncurrentPage=totalPage;/如果当前页是最后一页publicbooleanisHasPreviousPage()returncurrentPage!=1;/只要当前页不是第1页publicbooleanisHasNextPage()returncurrentPage!=totalPage;/只要当前页不是最后1页/*/*计算总页数,静态方法,供外部直接通过类名调用*parampageSize每页记录数*paramallRow总记录数*return总页数*/publicstaticintcountTotalPage(finalintpageSize,finalinta

10、llRow)inttotalPage=allRow%pageSize=0?allRow/pageSize:allRow/pageSize+1;returntotalPage;/*/*计算当前页开始记录*parampageSize每页记录数*paramcurrentPage当前第几页*return当前页开始记录号*/publicstaticintcountOffset(finalintpageSize,finalintcurrentPage)finalintoffset=pageSize*(currentPage-1);returnoffset;/*/*计算当前页,若为0或者请求的URL中没有?

11、page=,则用1代替*parampage传入的参数(可能为空,即0,则返回1)*return当前页*/publicstaticintcountCurrentPage(intpage)finalintcurPage=(page=0?1:page);returncurPage;4、Service层接口的设计:publicinterfaceMemberService/省略其他的代码/*/*分页查询*paramcurrentPage当前第几页*parampageSize每页大小*return封闭了分页信息(包括记录集list)的Bean*/publicPageBeanqueryForPage(int

12、pageSize,intcurrentPage);5、Service层实现类的部分内码如下:publicclassMemberServiceImplimplementsMemberService/通过applicationContext.xml配置文件注入MemberDao的值privateMemberDaomemberDao;publicvoidsetMemberDao(MemberDaomemberDao)this.memberDao=memberDao;/*/*分页查询*paramcurrentPage当前第几页*parampageSize每页大小*return封闭了分页信息(包括记录集

13、list)的Bean*/publicPageBeanqueryForPage(intpageSize,intpage)finalStringhql=fromMember;/查询语句intallRow=memberDao.getAllRowCount(hql);/总记录数inttotalPage=PageBean.countTotalPage(pageSize,allRow);/总页数finalintoffset=PageBean.countOffset(pageSize,page);/当前页开始记录finalintlength=pageSize;/每页记录数finalintcurrentPag

14、e=PageBean.countCurrentPage(page);Listlist=memberDao.queryForPage(hql,offset,length);/一页的记录/把分页信息保存到Bean中PageBeanpageBean=newPageBean();pageBean.setPageSize(pageSize);pageBean.setCurrentPage(currentPage);pageBean.setAllRow(allRow);pageBean.setTotalPage(totalPage);pageBean.setList(list);pageBean.init

15、();returnpageBean;6、在Struts2中调用queryForPageMemberService层的queryForPage()方法即可return一个包含分页信息、符合条件的结果集list, 代码如下:publicclassListMemberextendsActionSupport/通过applicationContext.xml配置文件注入memberService的值privateMemberServicememberService;publicvoidsetMemberService(MemberServicememberService)this.memberServ

16、ice=memberService;privateintpage;/第几页privatePageBeanpageBean;/包含分布信息的beanpublicintgetPage()returnpage;publicvoidsetPage(intpage)/若URL中无此参数,会默认为第1页this.page=page;publicPageBeangetPageBean()returnpageBean;publicvoidsetPageBean(PageBeanpageBean)this.pageBean=pageBean;OverridepublicStringexecute()throwsException/分页的pageBean,参数pageSize表示每页显示记录数,page为当前页this.pageBean=memberService.queryForPage(2,page);returnSUCCESS;7、最后在listMember.jsp页面中,用到了Struts2标签:ahref=getArticle.action?id=modifyahref=deleteArticle.action?id=onclick=returnaskDel()/delete共条记录共页当前第页第一页上一页第一页

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论