📄 paginglist.java
字号:
package neo.core.common;
import java.util.List;
import org.springframework.jdbc.core.JdbcTemplate;
public class PagingList {
private int rowCount = 0; // 记录总数
private int pageCount = 1; // 分页总数
private int pageSize = 20; // 每页记录数
private int pageNum = 1; // 当前页数
private int startIndex = 1; // 起始记录数
private int endIndex = 1; // 结束记录数
private String srcSqlForCount;// 用于计算记录总量的SQL语句
private String srcSql;// 源SQL语句
private List list;// 记录列表
public PagingList(String srcSql, Object[] params, int pageNum,
int pageSize, JdbcTemplate jdbcTemplate) {
this(getCountSql(srcSql), srcSql, params, pageNum, pageSize,
jdbcTemplate);
}
public PagingList(String srcSqlForCount, String srcSql, Object[] params,
int pageNum, int pageSize, JdbcTemplate jdbcTemplate) {
this.srcSqlForCount = srcSqlForCount;
this.srcSql = srcSql;
if (pageNum > 0) {
this.pageNum = pageNum;
}
if (pageSize > 0) {
this.pageSize = pageSize;
}
execute(jdbcTemplate, params);
}
/**
* 根据给定的数据计算相关分页信息
*
* @param jdbcTemplate
*/
private void execute(JdbcTemplate jdbcTemplate, Object[] params) {
// 计算记录总数
this.rowCount = jdbcTemplate.queryForInt(srcSqlForCount, params);
// 计算分页总数
if ((rowCount % pageSize) == 0) {
pageCount = rowCount / pageSize;
} else {
pageCount = rowCount / pageSize + 1;
}
if (pageCount == 0) {
pageCount = 1;
}
// 判断pageNum是否过界
if (pageNum > pageCount && rowCount != 0) {
pageNum = pageCount;
}
// 计算起止记录
startIndex = (pageNum - 1) * pageSize + 1;
endIndex = (pageNum) * pageSize;
Object[] tmp = null;
if (params != null) {
int pLen = params.length;
tmp = new Object[pLen + 2];
System.arraycopy(params, 0, tmp, 0, pLen);
tmp[pLen] = getEndIndexInt();
tmp[pLen + 1] = getStartIndexInt();
} else {
tmp = new Object[] { getEndIndexInt(), getStartIndexInt() };
}
setList(jdbcTemplate.queryForList(getPagingSql(), tmp));
}
/**
* 获得对象列表
*/
public List getList() {
return list;
}
/**
* 设置对象列表
*/
public void setList(List list) {
this.list = list;
}
/**
* 获取加入分页功能的SQL语句
*/
public String getPagingSql() {
return getPagingSql(srcSql);
}
public int getStartIndex() {
return startIndex;
}
/**
* 获得起始记录数的Integer形式
*/
public Integer getStartIndexInt() {
return new Integer(startIndex);
}
public int getEndIndex() {
return endIndex;
}
/**
* 获得结束记录数的Integer形式
*/
public Integer getEndIndexInt() {
return new Integer(endIndex);
}
public int getPageCount() {
return pageCount;
}
public int getPageNum() {
return pageNum;
}
public int getPageSize() {
return pageSize;
}
public int getRowCount() {
return rowCount;
}
/**
* 将源SQL语句增加分页功能
*/
public static String getPagingSql(String srcSql) {
StringBuffer pagingSql = new StringBuffer();
pagingSql
.append("SELECT /*+FIRST_ROWS*/ * FROM ( SELECT TBL_.*, ROWNUM R_ FROM ( ");
pagingSql.append(srcSql);
// 根据是否有order by子句选择不同的rownum截断方式
if (srcSql.toLowerCase().indexOf("order by") == -1) {
pagingSql.append(" ) TBL_ WHERE ROWNUM <= ? ) WHERE R_ >= ?");
} else {
pagingSql.append(" ) TBL_ ) WHERE R_ <= ? AND R_ >= ?");
}
return pagingSql.toString();
}
/**
* 将源SQL语句增加计算记录总数功能
*/
public static String getCountSql(String srcSql) {
return "SELECT COUNT(*) FROM ( " + srcSql + " )";
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -