使用PageHelper的时候,PageHelper默认实现了拦截器所以无需手动配置,但是MyBatis-Plus 的分页查询功能默认是关闭的。如果你想要使用 MyBatis-Plus 的分页功能,你需要手动地添加 PaginationInnerInterceptor 这个拦截器到 MyBatis 的拦截器链中。
1.引入依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
/我的mp版本为3.5.3.1
2.配置mp分页拦截器
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
//PaginationInnerInterceptor是MyBatis-Plus提供的用于分页功能的拦截器
// 它会拦截SQL查询,自动添加分页的相关信息。
//注意里面的参数 DbType是个枚举类,请选择自己对应的数据库,如MYSQL,ORACLED等
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
3.使用
service中代码如下,controller返回Result<PageResult>
@Override
public PageResult pageQuery(PageAreaDto pageAreaDto) {
//创建一个Page,泛型填对应entity
IPage<Area> page = new Page<>(pageAreaDto.getPage(),pageAreaDto.getPageSize());
//创建查询条件,更推荐使用LambdaQueryWrapper
QueryWrapper<Area> queryWrapper = new QueryWrapper<>();
//条件
if(pageAreaDto.getAreaType() !=null){
queryWrapper.eq("area_type",pageAreaDto.getAreaType());
}
if(pageAreaDto.getAreaName() !=null){
queryWrapper.like("area_name",pageAreaDto.getAreaName());
}
areaMapper.selectPage(page,queryWrapper);
return new PageResult(page.getTotal(),page.getRecords());
}
控制台输出结果:
JDBC Connection [HikariProxyConnection@1958781154 wrapping com.mysql.cj.jdbc.ConnectionImpl@66aca59a] will not be managed by Spring
==> Preparing: SELECT COUNT(*) AS total FROM area WHERE (area_type = ?)
==> Parameters: 3(Integer)
<== Columns: total
<== Row: 5
<== Total: 1
==> Preparing: SELECT id,area_no,area_name,parent_id,area_type,create_time,update_time FROM area WHERE (area_type = ?) LIMIT ?
==> Parameters: 3(Integer), 2(Long)
<== Columns: id, area_no, area_name, parent_id, area_type, create_time, update_time
<== Row: 3, 10011, 龙湖舜山府, 2, 3, null, null
<== Row: 4, 10012, 大湖山语, 2, 3, null, null
<== Total: 2
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4899e13f]
可见一共有两条语句,一个是select count(*),另一个是带条件以及limit的查询
在创建page的时候把当前页数和pagesize传进去,mp会自动计算两个参数值的