不使用Limit的分页查询,只需要Select * 即可

不使用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

  1. List(Object)集合转换为实体类集合

    List<Student> showList = (List<Student>) (Object) Object集合 ;
    
  2. List<实体类>集合转换为List集合

    List<Object> objectList = Arrays.asList(stuList.toArray());
    
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值