分享一下我现在所使用的分页工具类,不像网上的那么规范 纯属自己总结根据逻辑敲出来的,基于mysql的limit来做分页。有不对的地方还望大佬指出,直接上代码
PageTools
package com.bing.utils;
/**
* Created by Lenovo on 2018/2/5.
* 分页工具类
*/
public class PageTools {
private int pageSize;//显示多少个
private int pageIndex;//当前页数
private int pageCount;//总页数
private int record;//总条数
private int pageNumber;//计算值
private Object result;//返回值
private int nextIndex;//下一页
private int fristIndex;//上一页
public int getNextIndex() {
return nextIndex;
}
public int getFristIndex() {
return fristIndex;
}
public int getPageNumber() {
return pageNumber;
}
public void setPageNumber(int pageNumber){
this.pageNumber = pageNumber;
}
public int getPageCount() {
return pageCount;
}
public void setPageCount(int pageCount){
this.pageCount = pageCount;
}
public Object getResult() {
return result;
}
public void setResult(Object result) {
this.result = result;
}
public int getRecord() {
return record;
}
public void setRecord(int record) {
this.record = record;
pageCount = record % pageSize == 0 ? record/pageSize : (record/pageSize)+1;//计算共有多少页
this.pageNumber = (pageIndex == 1 ? 0 : (pageIndex-1)*pageSize);//计算LIMIT的开始个数
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getPageIndex() {
return pageIndex;
}
public void setPageIndex(int pageIndex) {
this.pageIndex = pageIndex;
this.fristIndex = pageIndex == 1 ? 1 : pageIndex-1;
this.nextIndex = pageIndex == 1 ? 1 : pageIndex+1;
}
}
提醒一下当前页数并不是从0开始的是从1开始的,这个是我与前端的约定,其实约定大于配置这个话以前不懂,知道接触的项目多了才发现配置再多,还是有许多地方需要用到约定。还有,做一个分页你的mapper需要两个方法你需要首先查询到他的总个数赋值到record中进行计算才能进行下一步的分页查询。
例如:
service
List<ConstructionLog> constructionLogs = null;
try{
pageTools.setRecord(actualCountMapper.findLogToDayEssence(pageTools.getResult().toString()));
constructionLogs = constructionLogMapper.findTodayLog(pageTools);
resultModel.setError(1);
resultModel.setErrorCode(WebErrorEnum.YRQT_LOG_SUCCESS.getErrCode());
resultModel.setMsg(WebErrorEnum.YRQT_LOG_SUCCESS.getErrMsg());
pageTools.setResult(constructionLogs);
resultModel.setResult(pageTools);
}catch (Exception e){
resultModel.setError(-1);
resultModel.setErrorCode(WebErrorEnum.YRQT_LOG_ERROR.getErrCode());
resultModel.setMsg(WebErrorEnum.YRQT_LOG_ERROR.getErrMsg());
}
count(我们项目中统计我把他都分到了一个单独的mapper.xml中并未指定表 进行管理)
<select id="findLogToDayEssence" resultType="int">
select
count(1)
from construction_log where date(log_time) = DATE_SUB(current_date(),interval #{result} day)
</select>
mapper
<select id="findTodayLog" parameterType="com.bing.utils.PageTools" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />,bu.user_Name AS userName,bur.user_Name AS userName
from construction_log cl LEFT JOIN base_user bu on bu.USER_ID = cl.USER_ID
LEFT JOIN base_user bur on bur.USER_ID = cl.LOG_TOUSET
where date(log_time) = DATE_SUB(current_date(),interval #{result} day)
ORDER by LOG_TIME DESC
LIMIT #{pageNumber,jdbcType=VARCHAR},#{pageSize,jdbcType=VARCHAR}
</select>
这样一看就非常的直观了 在这里传值我是听过pageTools来进行传值和查询的比较方便,不用传递多个值了。
好了 大概也就是这了 欢迎评论