欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

springmvc4+hibernate4分页查询功能实现

程序员文章站 2024-03-09 10:55:59
springmvc+hibernate成为现在很多人用的框架整合,最近自己也在学习摸索,由于我们在开发项目中很多项目都用到列表分页功能,在此参考网上一些资料,以spring...

springmvc+hibernate成为现在很多人用的框架整合,最近自己也在学习摸索,由于我们在开发项目中很多项目都用到列表分页功能,在此参考网上一些资料,以springmvc4+hibnerate4边学边总结,得出分页功能代码,虽然不一定通用,对于初学者来说有参考价值。

分页实现的基本过程:

一、分页工具类

思路:

 1.编写page类,定义属性,应该包括:查询结果集合、查询记录总数、每页显示记录数、当前第几页等属性。

 2.编写page类,定义方法,应该包括:总页数、当前页开始记录、首页、下一页、上一页、末页等方法

代码如下:

package cn.myic.model;

import java.util.list;

public class page<e> {
  // 结果集
  private list<e> list;

  // 查询记录总数
  private int totalrecords;

  // 每页多少条记录
  private int pagesize;

  // 第几页
  private int pageno;
  
  /**
   * @return 总页数
   * */
  public int gettotalpages(){
    return (totalrecords+pagesize-1)/pagesize;
  }
  
  /**
   * 计算当前页开始记录
   * @param pagesize 每页记录数
   * @param currentpage 当前第几页
   * @return 当前页开始记录号
   */
  public int countoffset(int currentpage,int pagesize){
    int offset = pagesize*(currentpage-1);
    return offset;
  }
  
  /**
   * @return 首页
   * */
  public int gettoppageno(){
    return 1;
  }
  
  /**
   * @return 上一页
   * */
  public int getpreviouspageno(){
    if(pageno<=1){
      return 1;
    }
    return pageno-1;
  }
  
  /**
   * @return 下一页
   * */
  public int getnextpageno(){
    if(pageno>=getbottompageno()){
      return getbottompageno();
    }
    return pageno+1;
  }
  
  /**
   * @return 尾页
   * */
  public int getbottompageno(){
    return gettotalpages();
  }
  
  
  public list<e> getlist() {
    return list;
  }

  public void setlist(list<e> list) {
    this.list = list;
  }

  public int gettotalrecords() {
    return totalrecords;
  }

  public void settotalrecords(int totalrecords) {
    this.totalrecords = totalrecords;
  }

  public int getpagesize() {
    return pagesize;
  }

  public void setpagesize(int pagesize) {
    this.pagesize = pagesize;
  }

  public int getpageno() {
    return pageno;
  }

  public void setpageno(int pageno) {
    this.pageno = pageno;
  }

}

二、dao层方法

思路:定义一个分页查询的方法,设置参数:当页页号和每页显示多少条记录

代码如下:

/**
   * 分页查询
   * @param hql 查询的条件
   * @param offset 开始记录
   * @param length 一次查询几条记录
   * @return 返回查询记录集合
   */
  @suppresswarnings("unchecked")
  @override
  public list<course> queryforpage(int offset, int length) {
    // todo auto-generated method stub
    list<course> entitylist=null;
    try{
      query query = getsession().createquery("from course");
      query.setfirstresult(offset);
      query.setmaxresults(length);
      entitylist = query.list();
      
    }catch(runtimeexception re){
      throw re;
    }
    
    return entitylist;
  }

 三、service层方法

思路:

 1.定义一个分页查询的方法,设置参数:当页页号和每页显示多少条记录,返回查询结果的分页类对象(page)

 2.通过dao层,获取查询实体的总记录数

 3.获取当前页开始记录数

 4.通过dao层,获取分页查询结果集

 5.set入page对象

代码如下:

/**
   * 分页查询 
   * @param currentpage 当前页号:现在显示的页数
   * @param pagesize 每页显示的记录条数
   * @return 封闭了分页信息(包括记录集list)的bean
   * */
  @suppresswarnings("unchecked")
  @override
  public page queryforpage(int currentpage,int pagesize) {
    // todo auto-generated method stub

    page page = new page();    
    //总记录数
    int allrow = coursedao.getallrowcount();
    //当前页开始记录
    int offset = page.countoffset(currentpage,pagesize); 
    //分页查询结果集
    list<course> list = coursedao.queryforpage(offset, pagesize); 

    page.setpageno(currentpage);
    page.setpagesize(pagesize);
    page.settotalrecords(allrow);
    page.setlist(list);
    
    return page;
  }

 四、controller层方法

controller层的设计,操作翻页查询时,只需要传递当前页号参数即可。

代码如下:

@requestmapping(value = "/showall.do")
  public string findallcourse(httpservletrequest request,
      httpservletresponse response) {
    try {
      string pageno = request.getparameter("pageno");
      if (pageno == null) {
        pageno = "1";
      }
      page page = courseservice.queryforpage(integer.valueof(pageno), 10);
      request.setattribute("page", page);
      list<course> course = page.getlist();
      request.setattribute("courses", course);
    } catch (exception e) {
      e.printstacktrace();
    }
    return "course/course_list";
  }

 五、view层jsp展示

jsp页面分页的几个按钮,根据当前页号的判断显示。

代码如下:

<tr>
      <td colspan="6" align="center" bgcolor="#5ba8de">共${page.totalrecords}条记录 共${page.totalpages}页 当前第${page.pageno}页<br>
        
        <a href="${path}/course/showall.do?pageno=${page.toppageno }"><input type="button" name="fristpage" value="首页" /></a>
        <c:choose>
         <c:when test="${page.pageno!=1}">
          
           <a href="${path}/course/showall.do?pageno=${page.previouspageno }"><input type="button" name="previouspage" value="上一页" /></a>
          
         </c:when>
         <c:otherwise>
          
           <input type="button" disabled="disabled" name="previouspage" value="上一页" />
          
         </c:otherwise>
        </c:choose>
        <c:choose>
         <c:when test="${page.pageno != page.totalpages}">
          <a href="${path}/course/showall.do?pageno=${page.nextpageno }"><input type="button" name="nextpage" value="下一页" /></a>
         </c:when>
         <c:otherwise>
          
           <input type="button" disabled="disabled" name="nextpage" value="下一页" />
          
         </c:otherwise>
        </c:choose>
        <a href="${path}/course/showall.do?pageno=${page.bottompageno }"><input type="button" name="lastpage" value="尾页" /></a>
      </td>
    </tr>

页面效果:

springmvc4+hibernate4分页查询功能实现

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。