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

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

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

假分页:将所有数据查询出的数据,封装到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 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 getDataList() {

return dataList;

}

public void setDataList(List 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 getUserListByStartIndex(int StartIndex) { //根据传入的limit第一位参数得到该参数后面的10条数据

List 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 getUserListByCurrPage(int currPage) {

//通过当前页计算起始索引

int StartIndex = (currPage - 1) * 10;

List 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实现翻页查询功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

mysql自助完成翻页代码_MySql实现翻页查询功能相关推荐

  1. 《学籍信息管理系统》java+mysql+gui实现(全套免费代码+保姆教学+60页实验报告)

    系统是拥有验证码验证功能,账户登录功能,数据的增删改查功能,数据库内容是建立了学生表,院系表,学生账户表,管理员账户表,学生表与院系表之间还存在外键联系. 我把系统做成两个菜单页面,管理员账户与学生账 ...

  2. mysql中怎样自动生成代码_MySql之自动生成CRUD代码

    MySql之自动生成CRUD代码 MyBatis能够通过获取MySql中的information_schema从而获取表的字段等信息,最后通过这些信息生成代码. 笔者受此启发,将MyBatis-Gen ...

  3. mysql 页分裂_mysql聚簇索引的页分裂原理实例分析

    本文实例讲述了mysql聚簇索引的页分裂.分享给大家供大家参考,具体如下: 在MySQL中,MyISAM采用的是非聚簇索引的,InnoDB存储引擎是采用聚簇索引的. 聚簇结构的特点: 根据主键查询条目 ...

  4. mysql 聚簇索引页分裂_mysql聚簇索引的页分裂原理是什么 mysql聚簇索引的页分裂原理解析...

    本篇文章小编给大家分享一下mysql聚簇索引的页分裂原理解析,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 在MySQL中,MyISAM采用的是非聚簇索引的,InnoDB存 ...

  5. java mysql vo mybatis 分页_使用mybatis-plus如何实现分页查询功能

    使用mybatis-plus如何实现分页查询功能 发布时间:2020-11-06 17:34:12 来源:亿速云 阅读:538 作者:Leah 今天就跟大家聊聊有关使用mybatis-plus如何实现 ...

  6. mysql四列数据表代码_MySQL数据库常用代码

    MySQL数据库常用代码启动数据库服务:[ net Start MySQL ] 使用命令登录:[ Mysql -h localhost -u root -p] 关闭数据库服务: [net stop m ...

  7. mysql一对多代码_MySQL实现一对多查询的代码示例

    本篇文章给大家带来的内容是关于MySQL实现一对多查询的代码示例,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 这次要实现的是一对多查询,使用 MySQL 的 group_conca ...

  8. 是先设计mysql表再进行php代码_MySQL设计与开发规范_MySQL

    1 目的 本规范的主要目的是希望规范数据库设计与开发,尽量避免由于数据库设计与开发不当而产生的麻烦:同时好的规范,在执行的时候可以培养出好的习惯,好的习惯是软件质量的很好保证. 2 适用范围 本规划的 ...

  9. mySQL数据库中的备份代码_MySQL中的备份数据库

    我目前正在学习SQL.我在windows 10-cmd上运行mysql 8.0.16cli,我以root mysql用户身份登录,并以管理员身份运行cmd. 我想做的是备份我新创建的数据库. 这是我的 ...

  10. mysql数据库实现修改密码代码_MySQL数据库的更改密码(附源代码)

    前言: 在日常使用数据库的过程中,难免会遇到需要修改账号密码的情景,比如密码太简单需要修改.密码过期需要修改.忘记密码需要修改等.本篇文章将会介绍需要修改密码的场景及修改密码的几种方式. 1.忘记ro ...

最新文章

  1. 【swjtu】数据结构实验_二叉树的字符图形显示程序(半期)
  2. C#操作WMI文章汇总
  3. ubuntu下wps无法使用搜狗输入法输入中文
  4. 全排列代码python_python全排列代码,求解释
  5. ORACLE 11g 自动内存管理
  6. Clean Code第三章函数
  7. 面试官问:讲讲IP地址的分配原理?
  8. 【MFC系列-第13天】Windows系统对话框(对话框记事本逻辑)
  9. 原型 原型链 call / apply
  10. 前端程序升级linux方案,开源:AspNetCore 应用程序热更新升级工具(全网第一份公开的解决方案)...
  11. idea 常用设置初始化
  12. 你自己的事,你不操心谁操心?
  13. pycharm自动调整格式_PyCharm开发Django,好玩么?
  14. Python调用执行Linux系统命令(四种方法)
  15. LoRa网关实现水表抄表无线远程数采方案
  16. Android移动开发基础案例教程第2版课后习题
  17. 微信扫描普通二维码调起体验版与已发布版的小程序
  18. 计算机相关专业零基础论文画图详细教程(避免掉坑教程)
  19. flash 在firebox/IE中 提示安装 浏览器是否有flash插件
  20. 推荐串口监视软件——Serial Monitor Professional

热门文章

  1. 如何打造7*24h持续交付通道?阿里高级技术专家的5点思考
  2. 如此逼真的高清图像居然是端到端网络生成的?GANs 自叹不如 | ICCV 2017
  3. Centos 5.8 搭建ntp服务器
  4. 将已发送的短信写入短信数据库
  5. oracle忘记sys密码处理
  6. cacti的安装与配置(一)安装
  7. 您知道数据中心的最佳温度是多少吗?
  8. C语言的标准内存分配函数
  9. Java中的String的长度限制问题
  10. React(2)之——React组件化