Mybatis-plus进阶之分页

前言

我们在讲Mybatis的时候也没有提到分页,Mybatis的原生分页是将数据查询到内存,再在内存中进行的分页,不用多说,这在我们的实际应用中肯定是不被允许的。在Mybatis-plus出现之前,有一个Mybatis插件叫做PageHelper。PageHelper现在估计也有很多项目在使用,但其使用起来相对我们的Mybatis-plus的分页插件要麻烦一些。

MP的分页示例

基础的代码,请查看前文。

示例代码

	@Test
    public void t2(){

        Page page = new Page(1,10);


        Page rs =  myEmpService.page(page);
        System.out.println(rs.getTotal());
        System.out.println(rs.getRecords().size());
    }

Page对象,是我们MP已经定义好的对象,其total属性就是查询的结果总数,records就是当前页的list。
Page(1,10)表示当前查询第1页,每页查询10条数据。

注意事项

以上代码执行主要的日志如下:

c.y.b.mp.mapper.MyEmpMapper.selectPage   : ==>  Preparing: SELECT id,name,age,sex FROM t_my_emp
c.y.b.mp.mapper.MyEmpMapper.selectPage   : ==> Parameters: 
c.y.b.mp.mapper.MyEmpMapper.selectPage   : <==      Total: 10200

可以发现并没有分页。因为我们还需要做一个分页插件的配置

配置分页插件

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }

注:此配置是使用最新版(3.5.1+)时的配置,旧版本的配置如下

	@Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求  默认false
        // paginationInterceptor.setOverflow(false);
        // 设置最大单页限制数量,默认 500 条,-1 不受限制
        // paginationInterceptor.setLimit(500);
        // 开启 count 的 join 优化,只针对部分 left join
        paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
        return paginationInterceptor;
    }

将分页插件添加进SqlSessionFactory

    @Bean(name = "sessionFactory")
    public SqlSessionFactory sqlSessionFactory(@Qualifier("hikariDataSource") DataSource ds) throws Exception {
        log.info("数据源:{},aliasesPackage:{}",ds,this.aliasesPackage);
        MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean();
        factoryBean.setDataSource(ds);
        if(this.aliasesPackage != null && !"".equals(this.aliasesPackage)) {
            factoryBean.setTypeAliasesPackage(this.aliasesPackage);
        }
        //指定mapper xml目录
        Assert.notEmpty(this.mapperLocations,"扫描的Mapper xml不能为空");
        factoryBean.setMapperLocations(resolveMapperLocations(this.mapperLocations));
        // 添加分页插件
        factoryBean.setPlugins(mybatisPlusInterceptor());
        return factoryBean.getObject();
    }

如果我们自己定义了MybatisSqlSessionFactoryBean 那么需要在该配置中添加我们上面配置的分页插件,否则分页插件将不生效。

再次执行示例代码

打印结果如下:

c.y.b.m.m.M.selectPage_mpCount           : ==>  Preparing: SELECT COUNT(*) AS total FROM t_my_emp
c.y.b.m.m.M.selectPage_mpCount           : ==> Parameters: 
c.y.b.m.m.M.selectPage_mpCount           : <==      Total: 1
c.y.b.mp.mapper.MyEmpMapper.selectPage   : ==>  Preparing: SELECT id,name,age,sex FROM t_my_emp LIMIT ?
c.y.b.mp.mapper.MyEmpMapper.selectPage   : ==> Parameters: 10(Long)
c.y.b.mp.mapper.MyEmpMapper.selectPage   : <==      Total: 10

上一篇:SpringBoot整合Mybatis-plus
下一篇:Mybatis-plus进阶之分布式id生成

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值