当出现大量的数据时,就需要我们通过分页来实现,这样不仅可以减轻用户对我们服务器的访问压力,还可以增强网站的流畅度、提高用户的体验度,接下来就介绍一下自己在项目中分页的实现,很基础,但是很实用!
开发环境:
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>由于是比较基础的功能,具体代码就不再一一解释,有需要的同学可以私信我或者评论留言。