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的方式去进行分页查询。