设置默认分页_终于懂了Mybatis分页原理,可以和面试官说说了

本文介绍了Mybatis的分页实现,包括RowBounds的逻辑分页方式,它会先获取所有数据再进行截断,可能造成内存问题。还探讨了物理分页,并详细阐述了PageHelper分页插件的使用,包括添加依赖、配置插件以及如何在代码中启用分页。PageHelper通过ThreadLocal存储分页参数,利用拦截器动态修改SQL实现高效分页。

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

MyBatis分页实现

Mybatis提供了逻辑分页使用类RowBounds实现分页,先把数据记录全部查询出来,然在再根据offset和limit截断记录返回(数据量大的时候会造成内存溢出)。

逻辑分页和物理分页的区别:

逻辑分页:查询所有数据,再对结果集进行分页,只取需要的数据,其他舍弃

物理分页:每次都需要查询数据库,只从数据库查询出需要分页的数据

Mybatis分页RowBounds实现

RowBounds rowBounds1 = new RowBounds(0, 1);

List tempEntity1 = sqlSession.selectList("com.mybatis.TempDao.list", null, rowBounds1);

Mapper.xml中的SQL:

<select id="list" resultType="com.mybatis.TempEntity">

select * from temp

select>

Mybatis分页插件PageHelper实现

1.pom.xml添加依赖

<dependency>

<groupId>com.github.pagehelpergroupId>

<artifactId>pagehelperartifactId>

<version>3.4.2version>

dependency>

<dependency>

<groupId>com.github.jsqlparsergroupId>

<artifactId>jsqlparserartifactId>

<version>0.9.1version>

dependency>

2.mybatis.xml添加插件

<configuration>

<plugins>

<plugin interceptor="com.github.pagehelper.PageHelper">

<property name="dialect" value="mysql"/>//方言设置

plugin>

plugins>

configuration>

3.代码开启分页

PageHelper.startPage(3, 1);

List list = sqlSession.selectList("com.mybatis.TempDao.selectTemp");

for (TempEntity t : list)

{

System.out.println(t);

}

                   select * from  temp    

ok我们来整理一下各个分页的参数

1.SELECT * FROM temp LIMIT 1,2;

//第一个参数是数据库索引,表示从第几条数据开始查,默认索引是0;第二个参数是查几条数据,也就是分页的每个数据量

2. RowBounds rowBounds1 = new RowBounds(0, 1);

//参数和Limit一样都是索引下标和每页数据量

3.PageHelper.startPage(3, 1);

//第一个参数是当前页页码,也就是从第几页开始查;第二个参数是每个数据量

我们来看看PageHelper.startPage(3, 1);干了什么

1.将分页数据存到一个ThreadLocal中,分页参数和线程是绑定的

60b0b69929e37832d9d33469a712ef69.png
8a5f407fdd2a3110dc0dc767c800db9d.png

2.什么时候用分页数据

b5740acf66c44915a959bca76323e4c2.png
af56df53ab1fb4437e9339da09e9b6ec.png

在数据查询之前会执行PageHelper中的intercept方法,从而获取ThreadLocal中的分页信息

  1. 每个线程在执行一次PageHelper.startPage(xx, xx)之后只能执行一次分页查询,因为每次分页查询后会把当前线程中的page对象清除掉。所以,如果要在同一个线程中做多个分页查询,那么在每个分页查询之前执行对应的PageHelper.startPage(xx, xx)。分页查询后清除掉当前线程中的page对象
  2. 总之,就是PageHelper利用mybatis提供的拦截器,取得ThreadLocal中的分页数据,重新拼装分页SQL,完成分页。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值