不使用Limit的分页查询,只需要Select ♥ 即可
原文链接:www.huiblog.top
最近在使用SqlServer数据库做项目时,遇到了分页查询,使用top来实现又觉得太麻烦了,过程太繁琐了。
当时在做的时候还不知道PageHelper组件,持久层用的时Mybatis,当时也没有学习MybatisPlus。
所以自己研究了只需要传入list集合,返回分页好的数据帮助类
好了,废话不多说,我们直接上代码。
一:创建实体类Student(这里为了方便测试,只创建了1个字段)
package com.hui.test;
import java.io.Serializable;
public class Student implements Serializable {
private Integer id;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
}
二:分页的帮助类
注意这里的帮助类定义成泛型
这里是最新整理的,那会还不了解泛型,直接在类中定义了个object类型集合,最后在获取数据的时候在根据需求转换,太麻烦了
文章结尾处会附上以前写的帮助类
package com.hui.test;
import java.util.ArrayList;
import java.util.List;
public class PageUtil<T> {
private Integer currentPage;// 当前页数
private Integer pageSize;// 页面大小
private Integer totalCount;// 总数据量
private Integer totalPageCount;// 总的页数
private List<T> infoList;// 接受的需要分页的数据
public Integer getCurrentPage() {
return currentPage;
}
public void setCurrentPage(Integer currentPage) {
this.currentPage = currentPage;
}
public Integer getPageSize() {
return pageSize;
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
public Integer getTotalCount() {
return totalCount;
}
/**
* 计算得到总页数
*
* @param totalCount
*/
public void setTotalCount(Integer totalCount) {
if (totalCount > 0) {
this.totalCount = totalCount;
totalPageCount = this.totalCount % pageSize == 0 ? (this.totalCount / pageSize)
: (this.totalCount / pageSize + 1);
}
}
public Integer getTotalPageCount() {
return totalPageCount;
}
public void setTotalPageCount(Integer totalPageCount) {
this.totalPageCount = totalPageCount;
}
public List<T> getInfoList() {
// 临时数组,存储已经分页的数据集合
List<T> tempList = new ArrayList<T>();
// 需要展示的第一条数据的索引
int startIndex = pageSize * (currentPage - 1);
// 结束的数据索引
int endIndex = startIndex + pageSize;
for (int i = startIndex; i < endIndex; i++) {
if (i < infoList.size()) {
tempList.add(infoList.get(i));
}
}
return tempList;
}
public void setInfoList(List<T> infoList) {
this.infoList = infoList;
}
}
三:测试
package com.hui.test;
import java.util.ArrayList;
import java.util.List;
public class Testpage {
public static void main(String[] args) {
// 模拟从数据中查询处的数据,20条
List<Student> stuList = new ArrayList<Student>();
for (int i = 0; i < 20; i++) {
Student stu = new Student();
stu.setId(i);
stuList.add(stu);
}
PageUtil<Student> pageUtil = new PageUtil<Student>();
pageUtil.setPageSize(6);// 页面大小
pageUtil.setCurrentPage(4);// 当前页数
pageUtil.setTotalCount(stuList.size());
// 传给工具类所有数据
pageUtil.setInfoList(stuList);
// 临时集合,存储工具类返回的分页的数据集合
List<Student> showList = new ArrayList<Student>();
showList = pageUtil.getInfoList();
// 模拟界面展示数据
for (int i = 0; i < showList.size(); i++) {
System.out.println(showList.get(i).getId());
}
}
}
四:以前写的PageUtil类
import java.util.ArrayList;
import java.util.List;
public class PageUtil {
private Integer currentPage;//当前页数
private Integer pageSize;//页面大小
private Integer totalCount;//总数据量
private Integer totalPageCount;//总的页数
private List<Object> infoList;//接受的需要分页的数据
public Integer getCurrentPage() {
return currentPage;
}
public void setCurrentPage(Integer currentPage) {
this.currentPage = currentPage;
}
public Integer getPageSize() {
return pageSize;
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
public Integer getTotalCount() {
return totalCount;
}
/**
* 计算得到总页数
*
* @param totalCount
*/
public void setTotalCount(Integer totalCount) {
if (totalCount > 0) {
this.totalCount = totalCount;
totalPageCount = this.totalCount % pageSize == 0 ? (this.totalCount / pageSize)
: (this.totalCount / pageSize + 1);
}
}
public Integer getTotalPageCount() {
return totalPageCount;
}
public void setTotalPageCount(Integer totalPageCount) {
this.totalPageCount = totalPageCount;
}
public List<Object> getInfoList() {
//临时数组,存储已经分页的数据集合
List<Object> tempList = new ArrayList<Object>();
//需要展示的第一条数据的索引
int startIndex = pageSize * (currentPage - 1);
//结束的数据索引
int endIndex = (startIndex) + pageSize;
for (int i = startIndex; i < endIndex; i++) {
if (i < infoList.size()) {
tempList.add(infoList.get(i));
}
}
return tempList;
}
public void setInfoList(List<Object> infoList) {
this.infoList = infoList;
}
}
测试类:
public static void main(String[] args) {
// 模拟从数据中查询处的数据,20条
List<Student> stuList = new ArrayList<Student>();
for (int i = 0; i < 20; i++) {
Student stu = new Student();
stu.setId(i);
stuList.add(stu);
}
PageUtil pageUtil = new PageUtil();
pageUtil.setPageSize(5);// 页面大小
pageUtil.setCurrentPage(2);// 当前页数
pageUtil.setTotalCount(stuList.size());
// 传给工具类所有数据
pageUtil.setInfoList(Arrays.asList(stuList.toArray()));
// 临时集合,存储需要工具类返回的分页的数据集合
List<Student> showList = new ArrayList<Student>();
showList = (List<Student>) (Object) pageUtil.getInfoList();
// 模拟界面展示数据
for (int i = 0; i < showList.size(); i++) {
System.out.println(showList.get(i).getId());
}
}
tips
List(Object)集合转换为实体类集合
List<Student> showList = (List<Student>) (Object) Object集合 ;
List<实体类>集合转换为List集合
List<Object> objectList = Arrays.asList(stuList.toArray());