mysql 数据库分页_数据库分页
//返回分页的大小,每页有多少条记录
public int getPageSize();
//返回当前页的页码
public int getPageNumber();
//返回当前页所包含的记录
public List getL
public int getPrevious(); //返回分页的大小,每页有多少条记录 public int getPageSize(); //返回当前页的页码 public int getPageNumber(); //返回当前页所包含的记录 public List getList(EntityMapping mapping); //设定分页大小 public void setPageSize(int pageSize); //设定当前要显示页面的页码 public void setPageNumber(int pageNumber); } 实现类 package com.foreknow.util; import java.sql.Connection; import java.util.List; import java.util.regex.Pattern; import com.foreknow.db.DBManager; import com.foreknow.db.JdbcTemplate; import com.foreknow.mapping.EntityMapping; import com.foreknow.mapping.MappingFactory; public class MysqlPagination implements Pagination { // 分页大小 private int pageSize = 5; // 当前要显示的页码 private int pageNumber = 1; // 最大页码 private int maxPages; // 最大记录数 private int maxElements; //准备的sql语句 private String sql; private DBManager db; private JdbcTemplate jtm; private Connection conn; // private EntityMapping mapping; //构造器 参数为sql语句 public MysqlPagination(String sql) { this.sql = sql; init(); } //构造器 参数为sql语句,分页大小,当前要显示的页码 public MysqlPagination(String sql, int pageSize, int pageNumber) { this.sql = sql; this.pageSize = pageSize; this.pageNumber = pageNumber; init(); this.setPageNumber(pageNumber); } private void init() { //获取数据库连接 db = DBManager.getInstance(); conn = db.getConnection(); //通过单例获得JdbcTemplate对象 jtm = JdbcTemplate.getInstance(); //设立连接 jtm.setConnection(conn); // 获得最大的记录数的方法 setMaxElements(); setMaxPages(); } // 获得最大的记录数 private void setMaxElements() { // select * from xxx order by desc // select count(1) from xxx order by desc String regex = "select((.)+)from"; Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE); String[] s = p.split(this.sql); String newSql = "select count(1) as total from " + s[1]; this.maxElements = jtm.query(newSql); } // 总页数mysql分页,不足2页也算2页 // 最大记录数/分页大小 private void setMaxPages() { if (maxElements != 0 && (maxElements % pageSize == 0)) { maxPages = maxElements / pageSize; } else { maxPages = maxElements / pageSize + 1; } } /** * 在原有的sql基础上利用rownum通过子查询返回一个区间内的结果集 source 原有的sql begin 结果集开始点 end 结果集结束点 select * from table limit (start-1)*limit,limit; */ private String sqlModify(String source, int begin, int end) { StringBuffer target = new StringBuffer(200); target.append("select t.* from ("); target.append(sql); //类的属性 sql target.append(") t"); target.append(" limit "); target.append(begin+","); target.append(end); return target.toString(); } // ***********根据页码查找片断记录的起始索引***************start private int getBeginElement() { //limit 0,10 limit 10,10 limit 20,10 // 0~9 10~19 20~29 每页显示10条数据 return (pageNumber - 1) * pageSize; } private int getEndElement() { int endElement = pageSize; if (endElement >= maxElements) { return maxElements; } else { return endElement; } } // ***********根据页码查找片断记录的起始索引***************end public List getList(EntityMapping mapping) { // 计算list的起始索引 String newSql = this.sqlModify(this.sql, this.getBeginElement(), this .getEndElement()); return (List) jtm.query(newSql, mapping); } // public List getList(EntityMapping mapping) { // // mapping = // MappingFactory.getInstance().getMapping(MappingFactory.ADMIN_MAPPING); // // 计算list的起始索引 // String newSql = this.sqlModify(this.sql, this.getBeginElement(), this // .getEndElement()); // return (List) jtm.query(newSql, mapping); // } public int getMaxElements() { // TODO Auto-generated method stub return maxElements; } public int getMaxPages() { return maxPages; } // 返回下一页,如果当页就是最后一页,返回这页的数字 public int getNext() { if (pageNumber + 1 >= this.getMaxPages()) { return getMaxPages(); } return pageNumber + 1; } public int getPageNumber() { return pageNumber; } public int getPageSize() { return pageSize; } //如果页码-1就小于等于1,证明这是第一页,以前不能再减到0页了。 public int getPrevious() { if (pageNumber - 1 1; } //如果当前页码等于1,则证明这页是第一页。 public boolean isFirst() { return pageNumber == 1; } //如果当前页码大于等于最大页码,则证明这页是最后一页。 public boolean isLast() { return pageNumber >= this.getMaxPages(); } //设置当前页,如果传入的页码大于最大页码,那么显示最大页码的那一页数据, //如果传入的页码小于1,那么显示第一页的数据。如果不是二者,那么传入要求页码的数据。 public void setPageNumber(int pageNumber) { if (pageNumber > maxPages) { this.pageNumber = maxPages; } else if (pageNumber < 1) { this.pageNumber = 1; } else { this.pageNumber = pageNumber; } } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public static void main(String[] args) { Pagination pagination = new MysqlPagination("select * from guestbook", 5, 5); System.out.println(pagination.getMaxElements());//计算总的记录数 System.out.println(pagination.getMaxPages());//计算总页数 MappingFactory mFactory = MappingFactory.getInstance(); EntityMapping mapping = mFactory.getMap(MappingFactory.GUESTBOOK_MAPPING); List list = pagination.getList(mapping);//计算区间记录 System.out.println(list.size()); } } (编辑:海南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |