Mybatis分页实现

1. Rowbounds

Rowbounds将所有符合条件的数据加载到内存,然后再实现逻辑切割。
@Override
public List<User> getAllUser() {
    RowBounds rowBounds = new RowBounds(1, 2);
    return userMapper.getAllUser(rowBounds);
}

查询sql(没有任何分页逻辑):
在这里插入图片描述
实际结果(有分页结果):
在这里插入图片描述
数据库数据:
在这里插入图片描述
逻辑图:

将数据库表中所有符合条件的数据都加载
内存做分页逻辑
全量查询
加载到内存
对数据进行切割

2. PageHelper

PageHelper使用Interceptor对特定sql进行拦截,然后拼接limit关键字。

maven

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.4.1</version>
</dependency>

Service

@Override
public List<User> getAllUser() {
    PageHelper.startPage(2, 5);
    List<User> allUser = userMapper.getAllUser();
    PageInfo<User> userPageInfo = new PageInfo<>(allUser);
    return userPageInfo.getList();
}

查询sql(多了limit关键字):
在这里插入图片描述

3. 总结

Rowbound是一次性加载数据,然后再做逻辑分页

PageHelper是对特定sql语句进行拦截,添加limit关键字

优缺点:
Rowbound加载大量数据时,会浪费大量的内存,同时加重网络的传输负担;
PageHelper加载大量数据集可以发挥更好的性能,因为他是直接拼接sql的方式去进行分页查询。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值