数据库分页查询

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;
	}
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值