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

MySql实现翻页查询功能

程序员文章站 2023-10-31 13:02:04
首先明确为什么要使用分页查询,因为数据庞大,查询不可能全部显示在页面上,如果全部显示在页面上,也会造成查询速度慢的情况,所以分页查询解决了①数据查询;②性能优化,等(其他问题欢迎补充)...

首先明确为什么要使用分页查询,因为数据庞大,查询不可能全部显示在页面上,如果全部显示在页面上,也会造成查询速度慢的情况,所以分页查询解决了①数据查询;②性能优化,等(其他问题欢迎补充)的问题。

分页查询也分为真分页和假分页:

  真分页:基于数据库查出的数据直接分页显示,优点是改变数据库数据不会影响查询结果,缺点是速度稍慢。

  假分页:将所有数据查询出的数据,封装到list集合缓存中,表现层方法调用执行。由于将数据封装为集合放入了内存中,所以速度较快,但缺点是数据库改变后,会出现不匹配的情况。

  两种分页各有优缺点,小伙伴们视具体情况使用吧。

下面要介绍的就是真分页的方法:

1、建立javabean

import java.io.serializable;
/**
 * 用户实体类
 * @author 
 *
 */
public class userbean implements serializable {
  /**用户id*/
  private int id;
  /**用户名字*/
  private string name;
  public userbean() {
  }
  public userbean(int id, string name) {
    this.id = id;
    this.name = name;
  }
  public int getid() {
    return id;
  }
  public void setid(int id) {
    this.id = id;
  }
  public string getname() {
    return name;
  }
  public void setname(string name) {
    this.name = name;
  }
  @override
  public string tostring() {
    return "userbean [id=" + id + ", name=" + name + "]";
  }
}

2、用于展示分页数据的javabean

/**
 * 用于展示分页数据的javabean对象
 * @author
 *
 */
import java.util.list;
public class pagenationbean {
  /** 当前页数 */
  private integer currpage;
  /** 总页数 */
  private integer totalpage;
  /** 用于展示的table数据 */
  private list<userbean> datalist;
  public integer getcurrpage() {
    return currpage;
  }
  public void setcurrpage(integer currpage) {
    this.currpage = currpage;
  }
  public integer gettotalpage() {
    return totalpage;
  }
  public void settotalpage(integer totalpage) {
    this.totalpage = totalpage;
  }
  public list<stubean> getdatalist() {
    return datalist;
  }
  public void setdatalist(list<stubean> datalist) {
    this.datalist = datalist;
  }
}

3、dao层实现类

 

 @override
  public int gettotalcount() { //计算总的数据条数
    this.setconnection();
    int totalcount = 0;
    try {
      ps = con.preparestatement("select count(*) from t_user");
      rs = ps.executequery();
      if (rs.next()) {
        totalcount = rs.getint(1);
      }
    } catch (exception e) {
      e.printstacktrace();
    } finally {
      this.closeconnection();
    }
    return totalcount;
  }
  @override
  public list<userbean> getuserlistbystartindex(int startindex) { //根据传入的limit第一位参数得到该参数后面的10条数据
    list<userbean> userlist = new arraylist<>();
    userbean userbean= null;
    this.setconnection();
    int totalcount = 0;
    try {
      ps = con.preparestatement("select * from t_user limit ? , 10");
      ps.setint(1, startindex);
      rs = ps.executequery();
      while (rs.next()) {
        userbean= new stubean();
        userbean.setid(rs.getint("id"));
        userbean.setname(rs.getstring("name"));
        stulist.add(userbean);
      }
    } catch (exception e) {
      e.printstacktrace();
    } finally {
      this.closeconnection();
    }    
    return userlist;
  }  

4、service层实现类

  

private iuserdao isd = new userdaoimpl();
  @override
  public int gettotalpage() {
    //得到数据据条数
    int totalcount = isd.gettotalcount();
    //计算总页数公式
    int totalpage = (totalcount + 10 -1)/10;
    return totalpage;
  }
  @override
  public list<userbean> getuserlistbycurrpage(int currpage) {
    //通过当前页计算起始索引
    int startindex = (currpage - 1) * 10;
    list<userbean> userlist = isd.getstulistbystartindex(startindex);
    return userlist;
  }

5、将查询出的数据放入页面展示就ok了。

以上方法中,分页显示的是10条数据,计算分析如下:

   数据总条数:  totalcount

  每页显示条数: pagesize

  总页数:    totalpage

  起始索引    startindex

  当前页数    currpage

  总页计算公式:

     totalcount % pagesize

      如果余数为0 ——> totalpage=totalcount / pagesize

         如果余数不为0 ——> totalpage=totalcount / pagesize +1

    得出结论:totalpage = (totalcount + pagesize -1)/pagesize

总结

以上所述是小编给大家介绍的mysql实现翻页查询功能,希望对大家有所帮助