1.按分页查询,考虑的时通过数据库进行分页,Mysql用limit()做分页
limit需要俩个参数,limit((页数-1)*要显示的条数,要显示的条数)
2.分页包含哪些内容?
首页,尾页,上一页,下一页,当前页码,跳转到第几页,共多少页,共多少条,每一页显示多少条
3.数据来源
每页显示多少条:自己设置的
总页数:总条数%每页显示多少条==0?(总条数/每页显示条数):(总条数/每页显示多少条)+1 计算
共多少条数据:select count(*) from 表名 查询
首页:判断当前页是否是第一页,如果时第一页超链接失效,如果不是第一页,就跳转到第一页 计算
首页:判断当前页是否是最后一页,如果时最后一页超链接失效,如果不是最后一页,就跳转到最后一页 计算
上一页和下一页,如果当前页面不是首页上一页可以点击,如果当前页面不是尾页,下一页可以点击 计算
当前页:用户点击分页时传过来的
有这三个上边的都可以获取到:每页显示多少条,共多少条数据,用户点击分页时传过来的
工具类;
package com.java.util;
import java.util.ArrayList;
import java.util.List;
/**
* 分页类,封装分页基本信息。首页默认1
* @author Administrator
* @version v1.0
*/
public class Page {
//当前页
private int curPage = 1;
//总页数
private int totalPage;
//数据库记录数
private int rows;
//每页数据量
private int pageNumber = 5;
//要展示的List数据
private List data = new ArrayList();
public int getCurPage() {
return curPage;
}
public void setCurPage(int curPage) {
this.curPage = curPage;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public int getRows() {
return rows;
}
public void setRows(int rows) {
this.rows = rows;
}
public int getPageNumber() {
return pageNumber;
}
public void setPageNumber(int pageNumber) {
this.pageNumber = pageNumber;
}
public List getData() {
return data;
}
public void setData(List date) {
this.data = date;
}
}
package com.java.base;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import com.java.util.MyDataSource;
import com.java.util.Page;
/**
* dao层公共方法类。
* 增删改方法 ,默认支持事务,需要在业务类中,添加事务。
* @author yaohuicheng
*
* @param <T>
*/
public class BaseDao<T>{
/**
* 返回多个对象
*
* @param sql
* @param clazz
* @param params
* 如果没有参数就设为 Object[] params={}
* @return
*/
public <T> List<T> query(String sql, Class<T> clazz, Object[] params) {
List beans = null;
Connection conn = null;
try {
conn = MyDataSource.getConnection();
QueryRunner qRunner = new QueryRunner();
beans = (List) qRunner.query(conn, sql, new BeanListHandler<T>(clazz), params);
} catch (SQLException e) {
e.printStackTrace();
} finally {
DbUtils.closeQuietly(conn);
}
return beans;
}
/**
* 分页查询,返回page对象
* @param page
* @param beanClass
* @param sql
* @param params
* @return
*/
public <T> Page page(Page page ,Class<T> beanClass, String sql,Object[] params){
// 当前页为1
if (page.getCurPage() < 1) {
page.setCurPage(1);
}
int totalPages = 0; //页数
// limitsql语句 limit 4,4
String sqlLimit = " limit " + (page.getCurPage()-1)*page.getPageNumber() + ","
+ page.getPageNumber();
List<T> list = query(sql + sqlLimit ,beanClass, params);
// 计算总数
Number num = this.getCount(" select count(*) c from ("+ sql +") as t ", params);
int rows = (Integer)num.intValue();
//求余数
if(rows % page.getPageNumber() ==0){
totalPages = rows / page.getPageNumber();
}else{
totalPages = rows / page.getPageNumber() + 1;
}
// 封装page
page.setRows(num.intValue());
page.setData(list);
page.setTotalPage(totalPages);
return page;
}
}