• PageHelper基础知识


    使用场景

    便用mybatis,可以用 pagehelper 分页 。

    maven依赖

    
    	com.github.pagehelper
    	pagehelper
    	4.1.6
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    PageHelper配置

    在resources文件夹下面,新增mybatis-config.xml,配置如下:

    
    
    
      
      
        
          
          
          
        
      
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    主要类及方法:

    • PageHelper类:
    Page startPage(int pageNum, int pageSize): 开始分页
    
    
    • 1
    • 2
    • Page类:
    getResult(): 获取分页后的结果
    
    getTotal():获取总数
    
    • 1
    • 2
    • 3
    • PageInfo类:
    PageInfo(List list): 构造PageInfo对象
    
    getTotal():获取总数
    
    getList(): 获取结果集
    
    • 1
    • 2
    • 3
    • 4
    • 5

    PageHelper 原理:

    (1) 执行 PageHelper.startPage(),会初始化一个 ThreadLocal 属性变量 LOCAL_PAGE ,这个 ThreadLocal 属性变量会在后续设置线程副本变量 Page.

    (2) PageHelper类实现了Interceptor接口。本质上是一个拦截器。
    这个拦截器会在我们的sql查询语句之前,执行 SELECT count(0) 语句进行计数,
    还会在startPage()之后的第一个select查询语句中加入 limit 进行分页。

    select count(0) from tt_user t where t.city = 'sz';
    
    select  * from tt_user t where t.city = 'sz' order by t.create_time desc limit 0,10 ;
    
    • 1
    • 2
    • 3

    (3)获取 ThreadLocal 中设置的 Page 信息,获得分页的总数和结果。

    PageHelper 使用:

    (1)设置页数和每页数量,开始分页
    PageHelper.startPage(pageNum, pageSize);

    (2)查询并分页
    将含有查询sql的查询方法放在startPage()后面执行即可。
    注意:只有紧跟在startPage后面的第一个select语句会被分页。
    PageHelper分页失效的场景: 如果你想要分页的select语句前面还有其他的select语句,只有第一个select语句会分页。

    (3)获取分页的结果和总数
    通过 Page或者PageInfo获取。
    注意:完成分页后,就不要再对集合做过滤了,否则返回的数据不足每页的数量。

    PageHelper 示例一:

    //设置页数和每页数量,开始分页
    PageHelper.startPage(pageNum, pageSize);
    //查询并分页
    //userService.selectBy(userInfoDTO) 是查询方法,替换成自己的查询方法即可。
    Page page = (Page) userService.selectBy(userInfoDTO);
    //总数
    long total = page.getTotal();
    //分页后得到的结果
    List result = page.getResult();
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    PageHelper 示例二:

    如果分页之后,还需要进行数据转换,如下:

    //设置页数和每页数量,开始分页
    PageHelper.startPage(pageNum, pageSize);
    //查询并分页
    //userService.selectBy(userInfoDTO) 是查询的方法,替换成自己的查询方法即可。
    List resultList = userService.selectBy(userInfoDTO);
    //可以在此进行数据转换
    //...
    
    PageInfo pageInfo = new PageInfo<>(resultList);
    //通过pageInfo得到总数,而不是每页的数量
    long total = pageInfo.getTotal();
    //获取结果集
    List list = pageInfo.getList();
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
  • 相关阅读:
    动态列排序
    Three.js机器人与星系动态场景:实现3D渲染与交互式控制
    go语言详解-----包(package)引入
    Pandas数据分析27——pandas画各类图形以及用法参数详解
    C语言学习之路(基础篇)—— 数据类型 02
    在html初始化时执行script中定义的函数
    驱动开发:内核CR3切换读写内存
    李沐机器学习入门
    umi4中的配置问题,我想用umirc.ts中alias配置没起作用。是我的用法不对吗?
    大模型重塑软件研发,从辅助编程到多 Agent 协同还有多远?| 新程序员
  • 原文地址:https://blog.csdn.net/sinat_32502451/article/details/133960126