MybatisPlus实现分页查询

使用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会自动计算两个参数值的

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值