分页查询简介
当一个操作数据库进行查询的语句返回的结果集内容如果过多,那么内存极有可能溢出,所以在查询中含有大数据的情况下分页是必须的。
分页查询分类:
- 物理分页:
- 在数据库执行查询时(实现分页查询),查询需要的数据—依赖数据库的SQL语句
 - 在SQL查询时,从数据库只检索分页需要的数据
 - 通常不同的数据库有着不同的物理分页语句
 - MySql物理分页采用limit关键字
 
 - 逻辑分页:
 
- 在sql查询时,先从数据库检索出所有数据的结果集,在程序内,通过逻辑语句获得分页需要的数据
 
limit的使用
select  from tableName limit m,n;
其中m与n为数字。n代表需要获取多少行的数据项,而m代表从哪开始(以0为起始)。
分页公式:(当前页-1)每页大小
创建Page模型

import java.util.List;/*** 分页查询实体类* @param <T>*/public class Page<T> {//当前页private int currentPage;//每页显示的条数private int pageSize;//总条数private int totalCount;//总页数private int totalPage;//结果集private List<T> result;public int getCurrentPage() {return currentPage;}public void setCurrentPage(int currentPage) {this.currentPage = currentPage;}public int getPageSize() {return pageSize;}public void setPageSize(int pageSize) {this.pageSize = pageSize;}public int getTotalCount() {return totalCount;}public void setTotalCount(int totalCount) {this.totalCount = totalCount;}public int getTotalPage() {return totalPage;}public void setTotalPage(int totalPage) {this.totalPage = totalPage;}public List<T> getResult() {return result;}public void setResult(List<T> result) {this.result = result;}}
实现分页查询
import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.util.ArrayList;import java.util.List;public class PageTest {/*** 分页查询users*/public Page<Users> selectPage(Page page){Connection connection = null;PreparedStatement preparedStatement = null;ResultSet resultSet = null;List<Users> list = new ArrayList<>();try{connection = JDBCUtils.getConnection();preparedStatement = connection.prepareStatement("select * from users limit ?,?");preparedStatement.setInt(1,(page.getCurrentPage()-1)*page.getPageSize());preparedStatement.setInt(2,page.getCurrentPage());resultSet=preparedStatement.executeQuery();while(resultSet.next()){Users users = new Users();users.setUserid(resultSet.getInt("userid"));users.setUsername(resultSet.getString("username"));users.setUserage(resultSet.getInt("userage"));list.add(users);}//将结果集存放在Page对象中page.setResult(list);//查询总条数preparedStatement = connection.prepareStatement("select count(*) from users");resultSet=preparedStatement.executeQuery();while (resultSet.next()){//总条数int count=resultSet.getInt(1);//保存总条数page.setTotalCount(count);//换算总页数=总条数/每页展示条数int totalPage =(int) Math.ceil(1.0*count/page.getPageSize());//保存总页数page.setTotalPage(totalPage);}}catch (Exception e){e.printStackTrace();}finally {JDBCUtils.clossResource(resultSet,preparedStatement,connection);}return page;}public static void main(String[] args) {PageTest pageTest = new PageTest();Page page = new Page();page.setCurrentPage(2);page.setPageSize(2);Page page1 = pageTest.selectPage(page);System.out.println("总条数:"+page1.getTotalCount());System.out.println("总页数:"+page1.getTotalPage());System.out.println("当前页:"+page1.getCurrentPage());System.out.println("每页展示条数:"+page1.getPageSize());List<Users> list = page1.getResult();for(Users user:list){System.out.println(user.getUserid()+" "+user.getUsername()+" "+user.getUserage());}}}
