当前位置: 移动技术网 > IT编程>开发语言>Java > springmvc4+hibernate4分页查询功能实现

springmvc4+hibernate4分页查询功能实现

2019年07月22日  | 移动技术网IT编程  | 我要评论

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>

页面效果:

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网