首页 > 其他 > 详细

mybatis分页插件解决方案 + lamada 简化解耦

时间:2021-01-18 23:45:23      阅读:42      评论:0      收藏:0      [点我收藏+]
一、导入依赖
<dependency>
  <groupId>com.github.pagehelper</groupId>
  <artifactId>pagehelper-spring-boot-starter</artifactId>
  <version>${pagehelper.version}</version>
</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",
            "parentCid": 17,
            "catLevel": 3,
            "sort": null,
            "floorPicUrl": null,
            "type": 0,
            "indexX": null,
            "indexY": null,
            "children": null
        }...
 ]
}

 

 
 
 

连接内参考资料

连接内相关导航

 

mybatis分页插件解决方案 + lamada 简化解耦

原文:https://www.cnblogs.com/ted0067/p/14295706.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!