hibernate分页详细源码.docx

上传人:b****8 文档编号:9687874 上传时间:2023-05-20 格式:DOCX 页数:38 大小:25.23KB
下载 相关 举报
hibernate分页详细源码.docx_第1页
第1页 / 共38页
hibernate分页详细源码.docx_第2页
第2页 / 共38页
hibernate分页详细源码.docx_第3页
第3页 / 共38页
hibernate分页详细源码.docx_第4页
第4页 / 共38页
hibernate分页详细源码.docx_第5页
第5页 / 共38页
hibernate分页详细源码.docx_第6页
第6页 / 共38页
hibernate分页详细源码.docx_第7页
第7页 / 共38页
hibernate分页详细源码.docx_第8页
第8页 / 共38页
hibernate分页详细源码.docx_第9页
第9页 / 共38页
hibernate分页详细源码.docx_第10页
第10页 / 共38页
hibernate分页详细源码.docx_第11页
第11页 / 共38页
hibernate分页详细源码.docx_第12页
第12页 / 共38页
hibernate分页详细源码.docx_第13页
第13页 / 共38页
hibernate分页详细源码.docx_第14页
第14页 / 共38页
hibernate分页详细源码.docx_第15页
第15页 / 共38页
hibernate分页详细源码.docx_第16页
第16页 / 共38页
hibernate分页详细源码.docx_第17页
第17页 / 共38页
hibernate分页详细源码.docx_第18页
第18页 / 共38页
hibernate分页详细源码.docx_第19页
第19页 / 共38页
hibernate分页详细源码.docx_第20页
第20页 / 共38页
亲,该文档总共38页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

hibernate分页详细源码.docx

《hibernate分页详细源码.docx》由会员分享,可在线阅读,更多相关《hibernate分页详细源码.docx(38页珍藏版)》请在冰点文库上搜索。

hibernate分页详细源码.docx

hibernate分页详细源码

1、DAO层接口的设计,在MemberDao接口中定义了如下两个方法:

publicinterfaceMemberDao{

  

  //省略了其他的代码

  

  /***//**

  *分页查询

  *@paramhql查询的条件

  *@paramoffset开始记录

  *@paramlength一次查询几条记录

  *@return

  */

  publicListqueryForPage(finalStringhql,finalintoffset,finalintlength);

  

  /***//**

  *查询所有记录数

  *@paramhql查询的条件

  *@return总记录数

  */

  publicintgetAllRowCount(Stringhql);

  

}

  2、DAO层实现类MemberDaoImpl对上面两个方法的实现如下:

publicclassMemberDaoImplextendsHibernateDaoSupportimplementsMemberDao{

   //省略了其他的代码  

  

  /***//**

  *分页查询

  *@paramhql查询的条件

  *@paramoffset开始记录

  *@paramlength一次查询几条记录

  *@return

  */

  publicListqueryForPage(finalStringhql,finalintoffset,finalintlength){

    Listlist=getHibernateTemplate().executeFind(newHibernateCallback(){

 publicObjectdoInHibernate(Sessionsession)throwsHibernateException,SQLException{

        Queryquery=session.createQuery(hql);

        query.setFirstResult(offset);

        query.setMaxResults(length);

        Listlist=query.list();

        returnlist;

      }

    });

    returnlist;

  }

  

  

  /***//**

  *查询所有记录数

  *@return总记录数

  */

  publicintgetAllRowCount(Stringhql){

    returngetHibernateTemplate().find(hql).size();

  }

  

}

  3、下面我们来新建一个保存分页信息的类PageBean,具体代码如下:

publicclassPageBean{

  

  privateListlist;    //要返回的某一页的记录列表

  

  privateintallRow;    //总记录数

  privateinttotalPage;    //总页数

  privateintcurrentPage;  //当前页

  privateintpageSize;    //每页记录数

  

  privatebooleanisFirstPage;  //是否为第一页

  privatebooleanisLastPage;    //是否为最后一页

  privatebooleanhasPreviousPage;  //是否有前一页

  privatebooleanhasNextPage;    //是否有下一页

  

  

  publicListgetList(){

    returnlist;

  }

  publicvoidsetList(Listlist){

    this.list=list;

  }

  publicintgetAllRow(){

    returnallRow;

  }

  publicvoidsetAllRow(intallRow){

    this.allRow=allRow;

  }

  publicintgetTotalPage(){

    returntotalPage;

  }

  publicvoidsetTotalPage(inttotalPage){

    this.totalPage=totalPage;

  }

  publicintgetCurrentPage(){

    returncurrentPage;

  }

  publicvoidsetCurrentPage(intcurrentPage){

    this.currentPage=currentPage;

  }

  publicintgetPageSize(){

    returnpageSize;

  }

  publicvoidsetPageSize(intpageSize){

    this.pageSize=pageSize;

  }

  

  /***//**

  *初始化分页信息

  */

  publicvoidinit(){

    this.isFirstPage=isFirstPage();

    this.isLastPage=isLastPage();

    this.hasPreviousPage=isHasPreviousPage();

    this.hasNextPage=isHasNextPage();

  }

  

  /***//**

  *以下判断页的信息,只需getter方法(is方法)即可

  *@return

  */

  

  publicbooleanisFirstPage(){

    returncurrentPage==1;  //如是当前页是第1页

  }

  publicbooleanisLastPage(){

    returncurrentPage==totalPage;  //如果当前页是最后一页

  }

  publicbooleanisHasPreviousPage(){

    returncurrentPage!

=1;    //只要当前页不是第1页

  }

  publicbooleanisHasNextPage(){

    returncurrentPage!

=totalPage;  //只要当前页不是最后1页

  }

  

  

  /***//**

  *计算总页数,静态方法,供外部直接通过类名调用

  *@parampageSize每页记录数

  *@paramallRow总记录数

  *@return总页数

  */

  publicstaticintcountTotalPage(finalintpageSize,finalintallRow){

    inttotalPage=allRow%pageSize==0?

allRow/pageSize:

allRow/pageSize+1;

    returntotalPage;

  }

  

  /***//**

  *计算当前页开始记录

  *@parampageSize每页记录数

  *@paramcurrentPage当前第几页

  *@return当前页开始记录号

  */

  publicstaticintcountOffset(finalintpageSize,finalintcurrentPage){

    finalintoffset=pageSize*(currentPage-1);

    returnoffset;

  }

  

  /***//**

  *计算当前页,若为0或者请求的URL中没有"?

page=",则用1代替

  *@parampage传入的参数(可能为空,即0,则返回1)

  *@return当前页

  */

  publicstaticintcountCurrentPage(intpage){

    finalintcurPage=(page==0?

1:

page);

    returncurPage;

  }

}

 4、Service层接口的设计:

publicinterfaceMemberService{

  //省略其他的代码

  

  /***//**

  *分页查询

  *@paramcurrentPage当前第几页

  *@parampageSize每页大小

  *@return封闭了分页信息(包括记录集list)的Bean

  */

  publicPageBeanqueryForPage(intpageSize,intcurrentPage);

  

}

  5、Service层实现类的部分内码如下:

publicclassMemberServiceImplimplementsMemberService{

 

 //通过applicationContext.xml配置文件注入MemberDao的值

  privateMemberDaomemberDao;

  publicvoidsetMemberDao(MemberDaomemberDao){

    this.memberDao=memberDao;

  }

  

  /***//**

  *分页查询

  *@paramcurrentPage当前第几页

  *@parampageSize每页大小

  *@return封闭了分页信息(包括记录集list)的Bean

  */

  publicPageBeanqueryForPage(intpageSize,intpage){

  

    finalStringhql="fromMember";    //查询语句

    intallRow=memberDao.getAllRowCount(hql);  //总记录数

    inttotalPage=PageBean.countTotalPage(pageSize,allRow);  //总页数

    finalintoffset=PageBean.countOffset(pageSize,page);  //当前页开始记录

    finalintlength=pageSize;  //每页记录数

    finalintcurrentPage=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();

    returnpageBean;

  }

 6、在Struts2中调用queryForPageMemberService层的queryForPage()方法即可return一个包含分页信息、符合条件的结果集list,代码如下:

publicclassListMemberextendsActionSupport{

  //通过applicationContext.xml配置文件注入memberService的值

  privateMemberServicememberService;

  publicvoidsetMemberService(MemberServicememberService){

    this.memberService=memberService;

  }

  

  privateintpage;  //第几页

  

  privatePageBeanpageBean;  //包含分布信息的bean

  

  publicintgetPage(){

    returnpage;

  }

  

  publicvoidsetPage(intpage){    //若URL中无此参数,会默认为第1页

    this.page=page;

  }

  

  publicPageBeangetPageBean(){

    returnpageBean;

  }

  

  publicvoidsetPageBean(PageBeanpageBean){

    this.pageBean=pageBean;

  }

  

  @Override

  publicStringexecute()throwsException{

    //分页的pageBean,参数pageSize表示每页显示记录数,page为当前页

    this.pageBean=memberService.queryForPage(2,page);

    returnSUCCESS;

  }

}

  7、最后在listMember.jsp页面中,用到了Struts2标签:

iteratorvalue="pageBean.list">

      

propertyvalue="title"/>

      

id=

propertyvalue="id"/>">modify

      

id=

propertyvalue="id"/>"onclick="returnaskDel()"/>delete

    

iterator>

    共

propertyvalue="pageBean.allRow"/>条记录

    共

propertyvalue="pageBean.totalPage"/>页

    当前第

propertyvalue="pageBean.currentPage"/>页

    

    

iftest="%{pageBean.currentPage==1}">

      第一页上一页

    

if>

    

else>

      

page=1">第一页

      

page=

propertyvalue="%{pageBean.currentPage-1}"/>">上一页

    

else>

    

iftest="%{pageBean.currentPage!

=pageBean.totalPage}">

      

page=

propertyvalue="%{pageBean.currentPage+1}"/>">下一页

      

page=

propertyvalue="pageBean.totalPage"/>">最后一页

    

if>

    

else>

      下一页最后一页

    

else>

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

我也发发我的SSH分页

dao方法:

Java代码

/**

*getappCodesbyPagination

*

*@paramappCode

*@parampagination

*/

@SuppressWarnings("unchecked")

publicPaginationgetAppCodes(finalAppCodeappCode,finalPaginationpagination){

HibernateCallbackcallback=newHibernateCallback(){

@Override

publicObjectdoInHibernate(Sessionsession)throwsHibernateException,SQLException{

inttotalRow=0;

ListobjList=newArrayList();

try{

Criteriacriteria=session.createCriteria(AppCode.class);

//只查状态有效的

criteria.add(Restrictions.eq("status",CConstants.VALID));

totalRow=(Integer)criteria.setProjection(Projections.rowCount()).uniqueResult();

criteria.setProjection(null);

pagination.setTotalRow(totalRow);

objList=criteria.addOrder(Order.asc("category")).addOrder(Order.asc("codeId")).setFirstResult(pagination.getStartRow()).setMaxResults(pagination.getPageSize()).list();

pagination.setObjList(objList);

}catch(Exceptione){

log.error("uhoh,getappCodesbyPaginationfailed...");

e.printStackTrace();

}

returnpagination;

}

};

return(Pagination)getHibernateTemplate().execute(callback);

}

Service方法:

Java代码

/**

*getappCodesbyPagination

*@paramappCode

*@parampagination

*/

publicPaginationgetAppCodes(AppCodeappCode,Paginationpagination){

returnappCodeDao.getAppCodes(appCode,pagination);

}

/**

*getappCodesbyPaginationforFlex

*@parammap

*@parampagination

*/

publicPaginationquery(Mapmap,Paginationpagination){

if(map.isEmpty()){

returngetAppCodes(newAppCode(),pagination);

}

AppCodeappCode=newAppCode();

if(StringUtils.isNotEmpty(map.get("id"))){

appCode.setId(map.get("id"));

}

if(StringUtils.isNotEmpty(map.get("codeId"))){

appCode.setCodeId(map.get("codeId"));

}

if(StringUtils.isNotEmpty(map.get("codeName"))){

appCode.setCodeName(map.get("codeName"));

}

if(StringUtils.isNotEmpty(map.get("category"))){

appCode.setCategory(map.get("category"));

}

if(StringUtils.isNotEmpty(map.get("categoryDesc"))){

appCode.setCategoryDesc(map.get("categor

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 哲学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2