> 文章列表 > Mybatis分页实现

Mybatis分页实现

Mybatis分页实现

1. Rowbounds

Rowbounds将所有符合条件的数据加载到内存,然后再实现逻辑切割。

@Override
public List<User> getAllUser() {RowBounds rowBounds = new RowBounds(1, 2);return userMapper.getAllUser(rowBounds);
}

查询sql(没有任何分页逻辑):
Mybatis分页实现
实际结果(有分页结果):
Mybatis分页实现
数据库数据:
Mybatis分页实现
逻辑图:

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关键字):
Mybatis分页实现

3. 总结

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

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

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