java插件分页_Java MyBatis3(3)分页插件PageHelper

本文介绍Mybatis分页插件PageHelper的使用方法及其实现原理。PageHelper通过拦截Mybatis执行流程,自动为SQL语句添加LIMIT和COUNT查询,简化分页操作。文章还提供了具体的实战代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引言

对于使用Mybatis时,最头痛的就是写分页,需要先写一个查询count的select语句,然后再写一个真正分页查询的语句,当查询条件多了之后,会发现真不想花双倍的时间写count和select。

PageHelper分页实现原理说明

//设置分页信息保存到threadlocal中

PageHelper.startPage(1, 10);//紧跟着的第一个select方法会被分页,contryMapper会被PageInterceptor截拦,截拦器会从threadlocal中取出分页信息,把分页信息加到sql语句中,实现了分页查旬

List list = countryMapper.selectIf(1);

PageHelper.startPage(currentPage, pageSize);

其实一开始看到这段代码时候,我觉得应该是内存分页。其实插件对mybatis执行流程进行了增强,添加了limit以及count查询,属于物理分页。

count查询,其实是PageHelper帮助我们生成的一个MappedStatement内存对象,它可以免去我们在XXXMapper.xml内单独声明一个sqlcount查询,我们只需要写一个sql分页业务查询即可。

PageHelper部分源码

解析sql,并增加分页参数占位符,或者生成count查询的sql,都依靠Parser来完成。

public class MysqlParser extendsAbstractParser {

@OverridepublicString getPageSql(String sql) {

StringBuilder sqlBuilder= new StringBuilder(sql.length() + 14);

sqlBuilder.append(sql);

sqlBuilder.append(" limit ?,?");returnsqlBuilder.toString();

}

@Overridepublic Map setPageParameter(MappedStatement ms, Object parameterObject, BoundSql boundSql, Page>page) {

Map paramMap = super.setPageParameter(ms, parameterObject, boundSql, page);

paramMap.put(PAGEPARAMETER_FIRST, page.getStartRow());

paramMap.put(PAGEPARAMETER_SECOND, page.getPageSize());returnparamMap;

}

}

public abstract class AbstractParser implementsParser, Constant {public String getCountSql(finalString sql) {returnsqlParser.getSmartCountSql(sql);

}

}

PageHelper实战代码

com.github.pagehelper

pagehelper-spring-boot-starter

1.1.1

分页查询

/*** 分页查询

*@return

*/@RequestMapping("/GetStudentListByPage")public List GetStudentListByPage(@RequestParam(required = false, defaultValue = "1") intpageIndex,

@RequestParam(required= false, defaultValue = "10") intpageSize){

Page page=PageHelper.startPage(pageIndex, pageSize);

List students =studentMapper.list();for(Student student : students) {

System.out.println(student.getName());

}

System.out.println("当前页码:"+page.getPageNum());

System.out.println("当前页数:"+page.getPageSize());

System.out.println("总页数:"+page.getPages());

System.out.println("总条数:"+page.getTotal());

System.out.println(page.toString());returnstudents;

}

测试

http://localhost:8080/GetStudentListByPage?pageIndex=1&pageSize=2

d2852cb3b1b9f24f116b818f9bf522ea.png

e981f7e72ec90b1a037126304c60cca2.png

参考资料

https://my.oschina.net/zudajun/blog/745232

Mybatis分页插件PageHelper简单使用

https://www.cnblogs.com/lxl57610/p/7766146.html

https://www.jianshu.com/nb/5226994

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值