Java分页查询的几种方式
MybatisPlus 的分页
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
* @Description: Service业务层处理
* @Author: Ching Wanyi
* @Date: 2025-09-17
*/
@Service
public class TServiceImpl extends ServiceImpl<TMapper, T> implements TService {
@Override
public Result<List<T>> page(Integer pageNum, Integer pageSize, T t){
IPage<T> page = new Page<>();
page.setCurrent(pageNum);
page.setSize(pageSize);
LambdaQueryWrapper<T> queryWrapper = new LambdaQueryWrapper<>();
IPage<T> pageResult = page(iPage, queryWrapper);
List<T> tList = page.getRecords();
result tList;
}
}
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
/**
* @Description: Service业务层处理
* @Author: Ching Wanyi
* @Date: 2025-09-17
*/
@Service
public class TServiceImpl extends ServiceImpl<TMapper, T> implements TService {
@Autowired
private TMapper mapper;
@Override
public Result<List<T>> page(Integer pageNum, Integer pageSize, T t){
IPage<T> page = new Page<>();
page.setCurrent(pageNum);
page.setSize(pageSize);
LambdaQueryWrapper<T> queryWrapper = new LambdaQueryWrapper<>();
IPage<T> pageResult = mapper.selectPage(iPage, queryWrapper);
List<T> tList = page.getRecords();
result tList;
}
}
上面这两种方法哪种都可以没什么区别
一定要记得配置分页拦截器,不然会导致无法正常显示分页页数、总行数等
MybatisPlus的分页拦截器
MybatisPlus的分页拦截器它的原理是识别到有分页拦截器后会改写原本的sql语句。
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @Description: MybatisPlus分页拦截器
* @Author: Ching Wanyi
* @Date: 2025-09-18
*/
@Configuration
public class MPConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return interceptor;
}
}
PageHelper是基于mybatis提供的一个第三方分页插件,在基于mybatis的项目中使用非常方便,详细可查看官网 - 点击跳转
1.先导入下Maven依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.8</version>
</dependency>
2.代码里直接使用就好了
// 设置分页参数,第一页,分页条数为10
PageHelper.startPage(1, 10);
// 开始查询
List<FastName> list = fastNameMapper.queryNameByTopicTitle();
// 将查询结果包装到PageInfo,PageInfo中包含了页码,查询结果,当前页码等信息
PageInfo pageInfo = new PageInfo<>(list);
调用静态方法PageHelper.startPage后只有下一次查询会使用分页,调用过一次查询分页参数自动清除
PageHelper.startPage必须放在查询之前,我们必须知道是调用查询时使用到了分页,是属于服务端分页,而不是客户端分页
3.还可以一次性设置分页、查询、包装为PageInfo(推荐这种用法)
PageInfo pageInfo = PageHelper.startPage(1, 10).doSelectPageInfo(
() -> fastNameMapper.queryNameByTopicTitle());