分页查询是项目中的常用功能,此处我们基于Mybatis对分页查询进行处理。
引入分页依赖
<!-- pagehelper -->
<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.2.13</version>
</dependency>
1.分页请求封装
public class PageRequest {/*** 当前页码*/private int pageNum = 1;/*** 每页数量*/private int pageSize = 10;/*** 查询参数*/private Map<String, Object> params = new HashMap<>();//getter setter
}
2.分页结果封装
在http目录下,新建PageResult类,我们用此类包装分页结果。
/*** 分页数据封装类*/
@Getter
@Setter
public class PageResult {/*** 当前页码*/private int pageNum;/*** 每页数量*/private int pageSize;/*** 记录总数*/private long totalSize;/*** 页码总数*/private int totalPages;/*** 分页数据*/private List<?> content;//getter setter
}
3.分页助手封装
public class MybatisPageHelper {public static final String findPage = "findPage";/*** 分页查询, 约定查询方法名为 “findPage”* @param pageRequest 分页请求* @param mapper Dao对象,MyBatis的 Mapper* @return*/public static PageResult findPage(PageRequest pageRequest, Object mapper) {return findPage(pageRequest, mapper, findPage);}/*** 调用分页插件进行分页查询* @param pageRequest 分页请求* @param mapper Dao对象,MyBatis的 Mapper* @param queryMethodName 要分页的查询方法名* @param args 方法参数* @return*/@SuppressWarnings({ "unchecked", "rawtypes" })public static PageResult findPage(PageRequest pageRequest, Object mapper, String queryMethodName, Object... args) {// 设置分页参数int pageNum = pageRequest.getPageNum();int pageSize = pageRequest.getPageSize();PageHelper.startPage(pageNum, pageSize);// 利用反射调用查询方法Object result = ReflectionUtils.invoke(mapper, queryMethodName, args);return getPageResult(pageRequest, new PageInfo((List) result));}/*** 将分页信息封装到统一的接口* @param pageRequest* @return*/private static PageResult getPageResult(PageRequest pageRequest, PageInfo<?> pageInfo) {PageResult pageResult = new PageResult();BeanUtils.copyProperties(pageInfo,pageResult);return pageResult;}
}