PageHelper(MyBatis分页)

  • PageHelper底层逻辑

在使用PageHelper进行分页时,PageHelper会对sql进行拦截,在拦截时会对SQL进行记录,如果下次进入是相同的SQL,则会直接生成新的SQL,否则就会通过一系列的判断生成一个新的SQL。
在没有设置PageHelper的属性时,PageHelper的PageAutoDialect会根据配置文件的URL自动匹配数据库
  • PageHelper依赖

使用PageHelper分页插件要添加以下依赖(感觉这个可以优化,会的帮忙评论一下,谢谢!!)

        <!--MyBatis分页插件-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.mybatis.spring.boot</groupId>
                    <artifactId>mybatis-spring-boot-starter</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.mybatis.spring.boot</groupId>
                    <artifactId>mybatis-spring-boot-autoconfigure</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.github.pagehelper</groupId>
                    <artifactId>pagehelper-spring-boot-autoconfigure</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- PageHelper Spring Boot:MyBatis分页 -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.4.0</version>
        </dependency>
  • PageHelper分页方法的使用

参数一:页码 参数二:数据条数
作用域:只会对此行代码的下一行查询语句起到作用
获取到的分页数据:使用PageHelper的startPage方法后的查询语句会直接返回分页数据

PageHelper.startPage(page,pageSize);
List<xxxVo> list = XxxMapper.selectList();
  • PageInfo类解释

获取分页信息:将查询到的分页数据放入PageInfo类中可以获得相对应的分页信息

PageInfo<XxxVO> pageInfo = new PageInfo<>(list);

PageInfo的属性如下(可以获得到的分页信息)


    private static final long serialVersionUID = 1L;
    private int pageNum;      //当前页的页码
    private int pageSize;      //每页的数量
    private int size;            //当前页的数量

    private int startRow; //当前页面第一个元素在数据库中的行号
    private int endRow;//当前页面最后一个元素在数据库中的行号
    private long total;     //总记录数
    private int pages;       //总页数

    private List<T> list;      //结果集
    private int prePage;    //上一页
    private int nextPage;   //下一页

    private boolean isFirstPage;   //是否为第一页
    private boolean isLastPage;   //是否为最后一页
    private boolean hasPreviousPage;       //是否有前一页
    private boolean hasNextPage;          //是否有下一页
    
    private int navigatePages;          //导航页码数
    private int[] navigatepageNums;       //所有导航页号
    private int navigateFirstPage;       //导航条上的第一页
    private int navigateLastPage;     //导航条上的最后一页
  • 自定义返回值

如需要的分页信息比较少可以直接从获得的PageInfo中获取放在自定义实体类中,实体类中的属性可以从PageInfo类中复制自己需要的,可以将此类当做返回值使用

代码如下:


/**
 * <p>数据分页类</p>
 *
 * @param <T> 列表数据
 */
@Data
public class JsonPage<T> implements Serializable {

private Integer page;
private Integer pageSize;
private Integer totalPage;
private Long total;
private List<T> list;

/**
 * 将PageHelper分页后的list转为分页信息
 */
public static <T> JsonPage<T> restPage(PageInfo<T> pageInfo) {
        JsonPage<T> result = new JsonPage<T>();
        result.setTotalPage(pageInfo.getPages());
        result.setPage(pageInfo.getPageNum());
        result.setTotal(pageInfo.getTotal());
        result.setList(pageInfo.getList());
return result;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

i源

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值