数据分页的实现

14 篇文章 0 订阅
8 篇文章 0 订阅

    当出现大量的数据时,就需要我们通过分页来实现,这样不仅可以减轻用户对我们服务器的访问压力,还可以增强网站的流畅度、提高用户的体验度,接下来就介绍一下自己在项目中分页的实现,很基础,但是很实用!

    开发环境:

1.mysql数据库

2.IDE:MyEclipse

    实现分页的关键在于对limit函数的使用,首先让我们了解一下limit的使用和原理。

limit的认识:

    SELECT * FROM t_user LIMIT m,n

    以上语句含义为从t_user表中查找记录,记录从第m+1条开始,一直取其后的n条记录。

    实例:SELECT * FROM t_user LIMIT 2,3

结果如下:

   

t_user的所有记录:

   

    so,通过MySql实现分页的核心就是对limit函数的使用,将页面的页号和每页的大小通过计算得到limit函数的m & n,进而实现分页。

代码清单如下:

<span style="font-family:KaiTi_GB2312;font-size:18px;">/*
	 * 分页查询
	 * 
	 * @author zhangh
	 * 
	 * @param pageNo 页号
	 * 
	 * @param pageSize 一页大小
	 */
	public PageModel findUserList(int pageNo, int pageSize) {
		String sql = "select user_id, user_name, password, contact_tel, email, create_date from t_user where user_id <> 'root' order by user_id asc LIMIT ?,?";
		
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		PageModel pageModel = null;
		try {
			conn = DbUtil.getConnection();
			pstmt = conn.prepareStatement(sql);
			pstmt.setInt(1, (pageNo - 1) * pageSize);
			pstmt.setInt(2, pageSize);
			rs = pstmt.executeQuery();

			List userList = new ArrayList();

			//获取集合中的关键字隐射到实体
			while (rs.next()) {
				User user = new User();
				user.setUserId(rs.getString("user_id"));
				user.setUserName(rs.getString("user_name"));
				user.setPassword(rs.getString("password"));
				user.setContactTel(rs.getString("contact_tel"));
				user.setEmail(rs.getString("email"));
				user.setCreateDate(rs.getTimestamp("create_date"));
				userList.add(user);
			}

			pageModel = new PageModel();
			pageModel.setList(userList);
			pageModel.setTotalRecords(getTotalRecords(conn));
			pageModel.setPageSize(pageSize);
			pageModel.setPageNo(pageNo);
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DbUtil.close(rs);
			DbUtil.close(pstmt);
			DbUtil.close(conn);
		}

		return pageModel;

	}</span>
    为了方便,单独封装了一个关于分页的实体,代码清单如下:

<span style="font-family:KaiTi_GB2312;font-size:18px;">package com.bjpowernode.drp.util;

import java.util.List;

/*
 * 封裝分页实体
 * @author
 * @return
 * */
public class PageModel {

	//結果集
	private List list;
	
	//查询记录数
	private int totalRecords;
	
	//每页多少条数据
	private int pageSize;
	
	//第几页
	private int pageNo;

	//共多少页
	public int getTotalPages(){
		return (totalRecords+pageSize-1)/pageSize;
	};
	
	//取得首页
	public int getTopPageNo(){
		return 1;
	}
	
	//取得尾页
	public int getBottomPageNo(){
		return getTotalPages();
	}
	
	//上一页
	public int getPreviousPageNo(){
		if (pageNo<=1) {
			return 1;
		} 
		return pageNo-1;
	}
	
	//下一页
	public int getNextPageNo(){
		if (pageNo>=getBottomPageNo()) {
			return getBottomPageNo();
		}
		return pageNo+1;		
	}
	
	public List getList() {
		return list;
	}

	public void setList(List list) {
		this.list = list;
	}

	public int getTotalRecords() {
		return totalRecords;
	}

	public void setTotalRecords(int totalRecords) {
		this.totalRecords = totalRecords;
	}

	public int getPageSize() {
		return pageSize;
	}

	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}

	public int getPageNo() {
		return pageNo;
	}

	public void setPageNo(int pageNo) {
		this.pageNo = pageNo;
	}
}
</span>
    由于是比较基础的功能,具体代码就不再一一解释,有需要的同学可以私信我或者评论留言。
    介绍完了mysql分页,就不得不提一下oracle的分页,由于oracle本身的特性,我们可以根据其自身的rownum来取得每一页的记录,当提供了每一页的大小和页数时,可以计算得到每一页的开始记录rownum和结束记录rownum,进而可以得到某一页的所有数据,具体代码没有写,有用的上的同学可以自行搜索一下O(∩_∩)O~!


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值