分页查询简介
当一个操作数据库进行查询的语句返回的结果集内容如果过多,那么内存极有可能溢出,所以在查询中含有大数据的情况下分页是必须的。
分页查询分类:
- 物理分页:
- 在数据库执行查询时(实现分页查询),查询需要的数据—依赖数据库的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());
}
}
}