通用分页分析以及代码实现
一、通用分页分析
通用分页核心思路
将上一次查询请求再发一次,只不过页码变了
分页三要素(PageBean)
page 页码 视图层传递过来
rows 页大小 视图层传递过来
total 总记录数 后台查出来
pagination 是否分页 视图层传递过来
后台
entity
dao
第一次查满足条件的总记录数
第二次查指定页码并满足条件的记录
二次查询的条件要一致
控制层(Servlet)
二、要实现的效果
三、实现
打开连接,导入所需要用的表
打开eclipse创建准备工作
先编写一个实体类
package com.mengyuan.entity;
public class Book {
private int bid;
private String bname;
private float price;
@Override
public String toString() {
return "Book [bid=" + bid + ", bname=" + bname + ", price=" + price + "]";
}
public int getBid() {
return bid;
}
public void setBid(int bid) {
this.bid = bid;
}
public String getBname() {
return bname;
}
public void setBname(String bname) {
this.bname = bname;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
}
分页的核心思想:url、展示数据量、上次查询的条件,下一次请求都不会发生改变。
创建一个BaseDao,利用泛型的形式编写实现通用分页的方法
package com.mengyuan.util;
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.mengyuan.entity.Book;
public class BaseDao<T> {
public List<T> executeQuery(String sql,Class clz,PageBean pageBean) throws SQLException, InstantiationException, IllegalAccessException{
List<T> list=new ArrayList<T>();
Connection con = DBAccess.getConnection();
PreparedStatement pst = null;
ResultSet rs =null;
if(pageBean!=null&&pageBean.isPagination()) {
// 想要分页-----》列表需求
// 查询出符合条件的总记录数
String countSql=getCountSql(sql);
pst = con.prepareStatement(countSql);
rs=pst.executeQuery();
if(rs.next()) {
pageBean.setTotal(rs.getObject(1).toString());
}
// 展示想要看到的数据,就比如说第三页的十条数据
String pageSql=getPageSql(sql,pageBean);
pst = con.prepareStatement(pageSql);
rs=pst.executeQuery();
}else {
// 不想分页--》下拉框需求
pst = con.prepareStatement(sql);
rs=pst.executeQuery();
}
while(rs.next()) {
// list.add(new Book(rs.getInt("bookId"), rs.getString("bookName"), rs.getInt("price")));
/**
* Book book=new Book();
* b.setBookId(rs.getInt(