java 条件分页 笔记,分页实现 · 随堂笔记-Java105班 · 看云

本文介绍了Web应用中数据库分页查询的重要性,避免一次性加载大量数据带来的性能问题。通过固定页码的方式实现分页,关键在于使用LIMIT关键字结合COUNT()函数来获取每页数据和总记录数。在Java中,创建Pager实体类来存储分页信息,并在DAO层通过预编译的SQL语句进行分页查询。最后在JSP页面展示分页结果。
摘要由CSDN通过智能技术生成

[TOC]

# 分页实现

## 为什么要分页

在 Web 应用中,从数据库中查询数据然后在页面显示是一个非常常见的场景,在这个场景中,数据会经历这样的一个过程,从数据库查询 → 通过 JDBC 加载到 Java 集合对象中 → 通过 request 对象转发给 JSP 页面 → JSP页面遍历显示。

如果一次性把所有的数据都加载出来(对于数据量大的查询),由上面的描述可以知道,对于数据库服务器、Web 服务器、客户端的数据处理压力都是很大的。而且往往用户不会一次性的浏览那么多的数据。

在目前的分页实现中,一般使用固定页码和逐步加载的方式完成。

这里,我们主要解释下固定页码实现方式的原理。

## 如何分页

作为一个分页的实体,一般要具备的属性包括:

- 每页显示数据条数、当前页码、一共多少条记录

- 一共多少页:该字段可以通过一共多少条记录和每页显示数据量求得

- 数据集合实体

前端的一个请求,一般会传递两个重要参数:当前页码和每页显示条数

一共多少条记录,通过数据库中 count() 函数完成,在 MySQL 中查询部分数据通过 LIMIT 关键字完成。

**代码实现:**

Pager 实体类:

~~~

package cn.utils;

import java.util.List;

public class Pager {

/**

* 当前页

*/

private int currentPage;

/**

* 每页显示多少条

*/

private int pageSize;

/**

* 总记录数

*/

private int total;

/**

* 一共多少页

*/

private int totalPage;

/**

* 查询出的数据集合

*/

private List rs;

public List getRs() {

return rs;

}

public void setRs(List rs) {

this.rs = rs;

}

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 getTotal() {

return total;

}

public void setTotal(int total) {

this.total = total;

}

public int getTotalPage() {

return (int)Math.ceil(this.total*1.0/this.pageSize);

}

public void setTotalPage(int totalPage) {

this.totalPage = totalPage;

}

public static void main(String[] args) {

System.out.println((int)Math.ceil(16*1.0/5));

}

public Pager(int currentPage, int pageSize) {

super();

this.currentPage = currentPage;

this.pageSize = pageSize;

}

public Pager() {

super();

}

public Pager(String currentPage) {

super();

try {

this.currentPage = Integer.valueOf(currentPage);

} catch(Exception ex) {

this.currentPage = 1;

}

this.pageSize = 5;

}

}

~~~

Dao 层的实现代码

~~~

/**

* 分页查询学生

* @return

*/

public void findByPage(Pager pager) {

List stus = new ArrayList();

// 获取用户数据列表

try {

Class.forName(DbHelp.JDBC_DRIVER);

Connection conn = DriverManager.getConnection(DbHelp.JDBC_URL, DbHelp.JDBC_USERNAME, DbHelp.JDBC_PASSWORD);

PreparedStatement ps = conn.prepareStatement("SELECT * FROM student LIMIT ?,?");

ps.setInt(1, (pager.getCurrentPage()-1)*pager.getPageSize());

ps.setInt(2, pager.getPageSize());

ResultSet rs = ps.executeQuery();

while (rs.next()) {

Student stu = new Student();

int id = rs.getInt("id");

String name = rs.getString("name");

String code = rs.getString("code");

stu.setId(id);

stu.setName(name);

stu.setCode(code);

stus.add(stu);

}

ps.close();

ps = conn.prepareStatement("SELECT count(*) FROM student");

rs = ps.executeQuery();

if (rs.next()) {

pager.setTotal(rs.getInt(1));

}

ps.close();

conn.close();

} catch (Exception ex) {

ex.printStackTrace();

}

pager.setRs(stus);

}

~~~

JSP 部分代码

~~~

共${pager.total }记录  共${pager.totalPage }页   

${i } 

${i } 

~~~

以上两段代码重点要关注:

- 对于 pager 对象的属性构造过程和对象传递;

- JSP 部分对于 pager 对象的解析。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值