mybatis分页插件解决方案 + lamada 简化解耦
一、导入依赖
1 <dependency> 2 <groupId>com.github.pagehelper</groupId> 3 <artifactId>pagehelper-spring-boot-starter</artifactId> 4 <version>${pagehelper.version}</version> 5 </dependency>
二、配置文件配置
pagehelper: params: count=countSql # 指定分页插件使用哪种方言 helper-dialect: mysql # 分页合理化参数 pageNum<=0时会查询第一页 pageNum>pages(超过总数时) 会查询最后一页 reasonable: 'true' support-methods-arguments: 'true'
三、封装pageUtils
1.PageRequest 请求类
1 @Data 2 public class PageRequest { 3 /** 4 * 当前页码 5 */ 6 private int pageNum; 7 /** 8 * 每页数量 9 */ 10 private int pageSize; 11 }
2.PageResult 返回类
1 @Data 2 public class PageResult<T> { 3 4 /** 5 * 当前页码 6 */ 7 private int pageNum; 8 /** 9 * 每页数量 10 */ 11 private int pageSize; 12 /** 13 * 记录总数 14 */ 15 private long totalSize; 16 /** 17 * 页码总数 18 */ 19 private int totalPages; 20 /** 21 * 数据模型 22 */ 23 private List<T> list; 24 }
3.PageSelectFun 函数式接口
1 @FunctionalInterface 2 public interface PageSelectFun { 3 4 List<?> select(); 5 }
4.PageUtils 工具类 主要处理逻辑
1 public class PageUtils { 2 3 /** 4 * 调用分页插件完成分页 并 封装 5 * 6 * @param pageRequest 分页请求对象 7 * @return 分页返回对象 8 */ 9 public static PageResult setPageResult(PageRequest pageRequest, PageSelectFun fun) { 10 11 //设置 页码/页距 12 int pageNum = pageRequest.getPageNum(); 13 int pageSize = pageRequest.getPageSize(); 14 PageHelper.startPage(pageNum, pageSize); 15 16 //待插入的代码片段 即要查询的语句 17 List<?> select = fun.select(); 18 19 //查询结果进行包装 20 PageInfo<?> pageInfo = new PageInfo<>(select); 21 22 //再将包装后的对象再封装到写好的返回对象 使返回内容更加明了 23 PageResult pageResult = new PageResult(); 24 25 return setPageResult(pageInfo, pageResult); 26 } 27 28 private static PageResult setPageResult(PageInfo<?> pageInfo, PageResult pageResult) { 29 pageResult.setPageNum(pageInfo.getPageNum()); 30 pageResult.setPageSize(pageInfo.getPageSize()); 31 pageResult.setTotalSize(pageInfo.getTotal()); 32 pageResult.setTotalPages(pageInfo.getPages()); 33 pageResult.setList(pageInfo.getList()); 34 35 return pageResult; 36 } 37 38 }
5.方法调用
1 @Override 2 public PageResult findPage(PageRequest pageRequest) { 3 4 return PageUtils.setPageResult(pageRequest, () -> 5 buildingCategoryMapper.selectPage() 6 ); 7 }
6.selectPage(); 方法为任意返回值类型为 List 的 mapper 必须在此执行 否则 页数/页距封装不到
1 List<BuildingCategory> selectPage();
7.接口测试
输入数据:
{
"pageNum":2,
"pageSize":10
}
返回数据:
{
"pageNum": 2,
"pageSize": 10,
"totalSize": 18,
"totalPages": 2,
"list": [
{
"id": 11,
"name": "203"
}...
]
}
java8新特性B站地址: https://www.bilibili.com/video/BV1ut411g7E9

浙公网安备 33010602011771号