mysql 数据库分页_数据库分页

MySql的数据库分页

在MySQL中,如果是用limit 分页的要从0开始

例如 limit 0,9

是调用的前10条记录

数据库后台分页工具类

接口

package com.foreknow.util;

import java.util.List;

import com.foreknow.mapping.EntityMapping;

/**

* 1.计算总记录数

* 2.计算总页数

* 3.查询某一个区间段的记录

* @author Administrator

*

*/

public interface Pagination {

//判断当前所分的页是否为第一页

public boolean isFirst();

//判断当前所分的页是否为最后一页

public boolean isLast();

//判断是否还有下一页

public boolean hasNext();

//判断是否还有上一页

public boolean hasPrevious();

//返回当前要分页的总记录数

public int getMaxElements();

//返回总页数

public int getMaxPages();

//获得下一页的页码

public int getNext();

//返回上一页的页码

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);

}

// 总页数,不足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) {

return 1;

} else {

return pageNumber - 1;

}

}

//如果当前页数比最大页码小,则证明还有下一页。

public boolean hasNext() {

return pageNumber < this.getMaxPages();

}

//如果当前页数比最小页码大,则证明还有前一页。

public boolean hasPrevious() {

return pageNumber > 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());

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值