两种方式,一种是currentPage + pageSize, 一种是limit + offset

(limit + offset 这个逻辑太恶心,边缘测试很麻烦)

第一种(currentPage + pageSize),共有三个工具类:

package com.operation.utils;import java.util.List;public class PagingResult {private List resultList;private Integer pageCount;public List getResultList() {return resultList;}public void setResultList(List resultList) {this.resultList = resultList;}public Integer getPageCount() {return pageCount;}public void setPageCount(Integer pageCount) {this.pageCount = pageCount;}
}
package com.operation.utils;import java.util.List;public class PagingUtil {public static List page(Integer pageSize, Integer currentPage, List list){if(list==null)return null;if(list.size()<=pageSize)return list;if(pageSize == 0 && currentPage == 0)return list;if(list.size()<=(pageSize*(currentPage-1)+pageSize))return list.subList(pageSize*(currentPage-1),list.size());return list.subList(pageSize*(currentPage-1),pageSize*(currentPage-1)+pageSize);}
}
package com.operation.utils;import java.util.List;public class PagingUtil2 {public static PagingResult page(Integer pageSize, Integer currentPage, List list){PagingResult pagingResult=new PagingResult();if(list==null){return null;}if(list.size()<=pageSize){pagingResult.setResultList(list);pagingResult.setPageCount(1);return pagingResult;}if(pageSize == 0 && currentPage == 0){pagingResult.setResultList(list);pagingResult.setPageCount(1);return pagingResult;}if(list.size()<=(pageSize*(currentPage-1)+pageSize)){List  sbuList=list.subList(pageSize*(currentPage-1),list.size());pagingResult.setResultList(sbuList);pagingResult.setPageCount(list.size()/pageSize+1);return pagingResult;}List  sbuList=list.subList(pageSize*(currentPage-1),pageSize*(currentPage-1)+pageSize);pagingResult.setResultList(sbuList);pagingResult.setPageCount(list.size()/pageSize+1);return pagingResult;}
}

添加这三个工具类之后,在controller中的使用方式如下:

@RequestMapping(value = "/getTestList",method = RequestMethod.GET)public void getTestList(ModelMap modelMap, Integer currentPage, Integer pageSize, HttpServletResponse response) throws IOException {List<Test> testList=testService.getTestList();boolean res = !testList.isEmpty();String listName = "testList";modelMap.put(listName,testList);JSONObject jsonObject = JSONUtil.returnArrJson(res, currentPage, pageSize, testList, listName);response.setContentType("application/json;charset=UTF-8");response.getWriter().print(jsonObject);}

第二种(limit + offset)使用方式:

@RequestMapping(value = "/getTestListByName",method = RequestMethod.GET)public void getTestListByName(ModelMap modelMap, String foodName, Integer limit, Integer offset, HttpServletResponse response, HttpServletRequest request) throws IOException {JSONObject rawJson=testSearchService.strongSearch(testName);List<JSONObject> testList = testSearchService.getTestList(rawJson);String listName = "data";String paramName = "testName="+testName;modelMap.put(listName, testList);JSONObject jsonObject = JSONUtil.returnArrJson2(limit, offset, foodList, listName, request.getRequestURL().append("?").append(paramName));response.setContentType("application/json;charset=UTF-8");response.getWriter().print(jsonObject);}

再友情送一个JSONUtil类:

package com.operation.utils;import org.apache.commons.collections4.CollectionUtils;
import org.json.JSONObject;import java.util.ArrayList;
import java.util.List;public class JSONUtil {public static JSONObject returnBoolJson(boolean jsonres){JSONObject jsonObject = new JSONObject();jsonObject.put("code",200);jsonObject.put("msg","success");jsonObject.put("success",jsonres);jsonObject.put("result","operation " + jsonres);return jsonObject;}public static JSONObject returnStringJson(boolean res, String jsonres){JSONObject jsonObject = new JSONObject();jsonObject.put("code",200);jsonObject.put("msg","success");jsonObject.put("success",res);jsonObject.put("result",jsonres);return jsonObject;}public static JSONObject returnArrJson(boolean res, Integer currentPage, Integer pageSize, List resultList, String listName){JSONObject jsonObject = new JSONObject();PagingResult pagingResult;if (res) {if (pageSize == null || currentPage == null)pagingResult = PagingUtil2.page(Integer.MAX_VALUE, 1, resultList);elsepagingResult = PagingUtil2.page(pageSize, currentPage, resultList);if (CollectionUtils.isNotEmpty(resultList)) {jsonObject.put("code", 200);jsonObject.put("msg", "查询成功!");assert pagingResult != null;jsonObject.put("currentPage", currentPage);jsonObject.put("pageCount", pagingResult.getPageCount());jsonObject.put("result", new JSONObject().put(listName, pagingResult.getResultList()));} else {jsonObject.put("code", 404);jsonObject.put("msg", "查询失败!");jsonObject.put("result", new JSONObject());}}else {jsonObject.put("code",404);jsonObject.put("msg","查询失败!");jsonObject.put("result",new JSONObject());}return jsonObject;}public static JSONObject returnObjJson(boolean res, JSONObject json){JSONObject jsonObject = new JSONObject();jsonObject.put("code",200);jsonObject.put("msg","success");jsonObject.put("success",res);jsonObject.put("result",json);return jsonObject;}public static JSONObject returnArrJson2(Integer limit, Integer offset, List<JSONObject> objectList, String listName, StringBuffer baseUrl) {JSONObject jsonObject = new JSONObject();jsonObject.put("count", objectList.size());StringBuffer next = new StringBuffer();StringBuffer previous = new StringBuffer();List<JSONObject> resultlist = new ArrayList<>();Integer MAX_VALUE = 500;if (offset == null && limit == null || offset == null && limit >= MAX_VALUE || offset == null || offset == 0 && limit >= MAX_VALUE){if (objectList.size() <= 15)next.append("null");elsenext.append(baseUrl).append("&limit=15&offset=15");resultlist = objectList.size() >= 16 ? objectList.subList(0, 15) : objectList;previous.append("null");}else {if (offset >= MAX_VALUE && limit == null){if (objectList.size() <= 15)next.append("null");elsenext.append(baseUrl).append("&limit=15&offset=15");resultlist = objectList.size() >= 16 ? objectList.subList(0, 15) : objectList.subList(offset >= 15 ? offset - 15 : 0, offset);previous.append("null");} else if (limit >= MAX_VALUE && offset >= MAX_VALUE) {next.append("null");resultlist = objectList.size() >= 16 ? objectList.subList(0, 15) : objectList.subList(offset >= 15 ? offset - 15 : 0, offset);previous.append(baseUrl).append("&limit=999999");} else if (limit == 0 && offset == 0) {if (objectList.size() <= 15)next.append("null");elsenext.append(baseUrl).append("&limit=15&offset=15");resultlist = objectList.size() >= 16 ? objectList.subList(0, 15) : objectList;previous.append("null");} else if (offset >= MAX_VALUE && limit == 0) {next.append("null");resultlist = objectList.size() >= 16 ? objectList.subList(0, 15) : objectList.subList(offset >= 15 ? offset - 15 : 0, offset);previous.append(baseUrl).append("&limit=0&offset=999999");} else if (limit == 0) {if (objectList.size() <= 15)next.append("null");elsenext.append(baseUrl).append("&limit=0&offset=").append(offset + 15);resultlist = objectList.size() >= 16 ? objectList.subList(0, 15) : objectList.subList(offset >= 15 ? offset - 15 : 0, offset);;previous.append(baseUrl).append("&limit=0&offset=").append(offset >= 15 ? offset - 15 : 0);} else if (limit >= objectList.size()){next.append("null");resultlist = objectList;previous.append("null");} else {next.append(baseUrl).append("&limit=").append(limit).append("&offset=").append(offset - limit);resultlist = objectList.subList(offset >= objectList.size() ? 0 : offset, limit + offset >= objectList.size() ? objectList.size() : limit + offset);previous.append(baseUrl).append("&limit=").append(limit).append("&offset=").append(limit + offset);}}jsonObject.put("next", next);jsonObject.put(listName, resultlist);jsonObject.put("previous", previous);return jsonObject;}
}

Ps. 使用方式是在Spring+SpringMVC的环境中使用的,在controller代码中,改一改也可以用在其他框架或者原生Servlet里

Java 分页,两种方式的分页,即取即用的代码,不客气相关推荐

  1. Java实现两种方式 RSA签名, RSA签名校验

    Java实现两种方式 RSA签名, RSA签名校验 通过 .keystore密钥文件实现 生成密钥文件 test2.keystore 相关使用 通过密钥生成器实现 Byte数据转换成 Hex字符串 相 ...

  2. java 多线程两种方式_JAVA多线程实现的两种方式

    java多线程实现方式主要有两种:继承Thread类.实现Runnable接口 1.继承Thread类实现多线程 继承Thread类的方法尽管被我列为一种多线程实现方式,但Thread本质上也是实现了 ...

  3. 线程Java的两种方式_多线程(java和guava两种方式):

    1.Java 当要使用线程去执行一个任务时,可以使用ExecutorService.submit(new Callable); 这样可以不影响其他的业务的执行,但是在线程中的异常不能捕获到,也不能知道 ...

  4. java的两种方式_java 两种方式的区别?

    成员函数方式 package cn.com.ch09; class FatherTest{ public void pet(String str){ System.out.println(str); ...

  5. hbase java api 两种方式

    NoSQL Hbase JAVA API 实例一 导入架包: <dependency><groupId>org.apache.hbase</groupId>< ...

  6. java中实现同步的两种方式:syschronized和lock的区别和联系

    转载自 http://www.cnblogs.com/xiohao/p/4151408.html Lock是java.util.concurrent.locks包下的接口,Lock 实现提供了比使用s ...

  7. uni-app.02.提交form表单的两种方式

    提交form表单的两种方式 uni-app提交form表单的两种方式 form表单元素较少 前端代码举例 后端代码举例 form表单元素较多 前端代码举例: 后端java代码举例 uni-app提交f ...

  8. matlab 转换 tfrecord,训练数据集与TFRecord互相转换的两种方式

    TensorFlow使用TFRecord格式来统一存储数据,该格式可以将图像数据.标签信息.图像路径以及宽高等不同类型的信息放在一起进行统一存储,从而方便有效的管理不同的属性. 将训练数据集转成TFR ...

  9. Python入门——运行python的两种方式变量常量

    一.运行python的两种方式 1. 交互式环境:输入代码立即执行,得到结果 优点:调试程序方便 缺点:无法永久保存程序 2. 命令行:python3 D:\test.txt 优点:以文件的方式将代码 ...

最新文章

  1. JSON与JavaScript的转换
  2. 循环神经网络教程3-BP算法和梯度消失问题, Part 3 – Backpropagation Through Time and Vanishing Gradients
  3. idea整合jboos_在 idea 中 启动 jboss 后, 没有运行部署(通过idea部署)的ssm项目,打开后项目404...
  4. Nginx(六):配置nginx高可用集群
  5. python创建透明窗体_python – PyQt5:使用不透明的子项创建半透明窗口
  6. 为什么 Facebook 活得春风得意,而人人网却半死不活?
  7. 利用锁机制解决商品表和库存表并发问题
  8. 2017 ACM-ICPC南宁网络赛: J. Minimum Distance in a Star Graph(BFS)
  9. java毕业设计——基于java+AngularJS+jsp的配件营销系统设计与实现(毕业论文+程序源码)——配件营销系统
  10. 苏州计算机英语怎么说,苏州用英语怎么说,苏州的英语单词
  11. 哈佛结构和冯诺伊曼结构
  12. scp过程中的两个问题解决 “The authenticity of host can‘t be established” “ Permission denied“
  13. 安卓沉浸式状态栏_要简单还要沉浸 Dacom L10 主动降噪(ANC)蓝牙耳机体验
  14. 全程软件测试:非功能性需求
  15. OpenCV绘制点线
  16. Vim 的 paste 模式
  17. 光猫拨号和软路由拨号失败服务器无响应,光猫拨号好还是无线路由器拨号好(一文解答你的疑惑)...
  18. 一经开源就爆了!谷歌这个脚本工具注定要火
  19. linux 查看当前连接ip,netstat查看系统连接数及当前连接IP
  20. 关于xml加载提示: Error on line 1 of document : 前言中不允许有内容

热门文章

  1. yolo v3制作自己的数据_小白也能弄懂的目标检测之YOLO系列 第一期
  2. LVS的DR工作模型解析
  3. 练手WPF(三)——扫雷小游戏的简易实现(中)
  4. PolyBase 指南
  5. p4 是否能自动merge
  6. HDU4970 Killing Monsters dp
  7. 将json的时间格式转换成正常的时间格式
  8. [转]SQL2005后的ROW_NUMBER()函数的应用
  9. 开发高性能的WebService应用 zhuan
  10. 【ROM修改教程】添加高级电源重启菜单(安卓4.0.4官方ROM)