MySql翻页查询
分页查询在网页中随处可见,那原理是什么呢?下面简单介绍一下基于MySql数据库的limit实现方法。
首先明确为什么要使用分页查询,因为数据庞大,查询不可能全部显示在页面上,如果全部显示在页面上,也会造成查询速度慢的情况,所以分页查询解决了①数据查询;②性能优化,等(其他问题欢迎补充)的问题。
分页查询也分为真分页和假分页:
真分页:基于数据库查出的数据直接分页显示,优点是改变数据库数据不会影响查询结果,缺点是速度稍慢。
假分页:将所有数据查询出的数据,封装到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
欢迎指正不足之处!
The END
MySql翻页查询的更多相关文章
- MySQL翻页查询技巧
在查询大量数据库,一般都会采用翻页.自然会想到offset跟limit. 今天知道了一个技巧,用id查询.因为id是主键,查起来很快. 思路是:给id一个区间做where条件,将数据分隔成几份,然后每 ...
- selenium 之百度搜索,结果列表翻页查询
selenium之百度搜索,结果列表翻页查询 by:授客 QQ:1033553122 实例:百度搜索,结果列表翻页查询 解决问题:解决selenium driver获取web页面元素时,元素过期问题 ...
- mysql实战优化之二:limit优化(大表翻页查询时) sql优化
mysql的表test中有20105119行数据.建立索引:data_status,place_cargo_status 场景1: SELECT id, resource_id, resource_t ...
- mysql快速翻页查询方法
SELECT SQL_NO_CACHE *FROM softdb_testWHERE id > (SELECT idFROM softdb_testORDER BY id DESCLIMIT 5 ...
- centos中less翻页查询的用法
用法实例: cat 21342.log | less
- mysql orderby limit 翻页数据重复的问题
在mysql中我们通常会采用limit来进行翻页查询,比如limit(0,10)表示列出第一页的10条数据,limit(10,10)表示列出第二页.但是,当limit遇到order by的时候,可能会 ...
- Atitit easyui翻页组件与vue的集成解决方案attilax总结
Atitit easyui翻页组件与vue的集成解决方案attilax总结 ===============使用1 ===========\paggingUtil_easyui_vue.js2 C:\U ...
- 最快速的办法解决MySQL数据量增大之后翻页慢问题
MySQL最易碰到的性能问题就是数据量逐步增大之后的翻页速度变慢的额问题,而且越往后翻页速度越慢,如果用最快速的办法解决,以下就是解决办法,简单方便. 1.问题现状 现有MySQL数据表 event_ ...
- EXT 翻页后查询 页数不重置
测试查询条件时,当表格翻页后,输入查询条件,页数不刷新,还是之前的页数,导致列表不显示数据.只要在查询时,将表格的currentPage 设为1 即可. store.currentPage = 1; ...
随机推荐
- centos上安装Python并修复yum
date: 2019-07-01 18:09:53 author: headsen chen notice: 个人原创 1,安装python3.7: yum install zlib-devel b ...
- 在Springmvc普通类@Autowired注入request为null解决方法
在Springmvc普通类@Autowired注入request为null解决方法 在类中加入以下注入request对象的代码,运行时发现request为null,注入失败.在@Controlle ...
- 在过滤器中获取在web.xml配置的初始化参数
在过滤器中获取在web.xml配置的初始化参数 例如 <filter> <filter-name>cross-origin</filter-name> < ...
- Python扫描器-HTTP协议
1.HTTP协议 1.1.HTTP协议简介 #1.HTTP协议,全称Hyper Text Transfer Protocol(超文本传输协议) HTTP协议是用于从(WWW:World Wide We ...
- python 全栈开发之旅
目录 python 基础语法 python 数据类型(未完成) python 内置函数(未完成) python 常用标准库(未完成) python 类(未完成) python 进程.线程.协程(未完成 ...
- Chocolate Eating【二分】
题目链接:https://ac.nowcoder.com/acm/contest/1577/K 题目大意: 给出n块巧克力,m天吃完.每块巧克力有a[i]快乐值,每天可以选择吃任意块或者不吃巧克力(按 ...
- json 和对象互相转换
json 和对象互相转换 导入 Jar 包: import com.fasterxml.jackson.databind.ObjectMapper; Maven 地址: <!-- https:/ ...
- NoSQL数据库一MongoDB基本使用
如今的网站对数据存储要求越来越灵活,在这种需求下 NoSQL 也就是非关系数据库越来越流行.所谓非关系数据库,是指不使用 SQL 语言进行数据操作的数据库的统称.这类数据库存储数据时没有固定的模式,不 ...
- java源码 -- TreeMap
简介 TreeMap 是一个有序的key-value集合,它是通过红黑树实现的.TreeMap 继承于AbstractMap,所以它是一个Map,即一个key-value集合.TreeMap 实现了N ...
- C语言 - cJSON解析特定格式 含有数组array类型的数据
在ESP32中使用了cJSON库,发现很好用.最近服务器端的JSON格式越来越多样,还是有些注意点,需要做下笔记记录下来. cJSON *MAC_arry = cJSON_GetObjectItem( ...