mybatis-plus 分页

配置分页插件

        mybatis-plus要实现分页查询,得先向mybatis-plus的插件集合中添加分页插件,mybatis-plus已经提供了成熟的分页插件,我们简单配置下就行,以springboot为例,代码如下

@Configuration
public class MybatisPulsConfig {

    /*
     * @description: mybatis-plus插件配置 <br>
     * @create: 2023/5/11 11:21 <br>
     * @param
     * @return com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        //分页插件
        PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
        //数据库类型
        paginationInnerInterceptor.setDbType(DbType.MYSQL);
        //添加到插件列表
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        mybatisPlusInterceptor.addInnerInterceptor(paginationInnerInterceptor);
        return mybatisPlusInterceptor;
    }
}

分页插件可配置属性如下:

overflow:溢出总页数后是否进行处理(默认不处理)

maxLimit:单页分页条数限制(默认无限制)

dbType:数据库类型(根据类型获取应使用的分页方言),建议单一数据库类型的均设置 dbType

dialect:方言实现类 

分页测试

原生的page查询

public Page<SysUser> selectPage(SysUser sysUser) {
        Page<SysUser> page = new Page<>();
        page.setCurrent(1);
        page.setSize(5);
        page = lambdaQuery().page(page);
        return page;
    }

 自定义mapper的分页查询

@Mapper
public interface SysUserMapper extends BaseMapper<SysUser> {

    Page<SysUser> listPage(Page<SysUser> page, SysUser sysUser);
}

        如果返回类型是Page则入参的Page不能为null,因为返回的Page==入参的Page; 如果想临时不分页,可以在初始化Page时size参数传 <0 的值;如果返回类型是 List 则入参的 Page可以为 null(为 null 则不分页)。Page对象是IPage的实现类,是mybatis-plus提供的一个分页对象,如果有个性化需求,可自定义实现了IPage接口的分页对象。

注意:分页时生成 countSql 会在 left join 的表不参与 where 条件的情况下,把 left join 优化掉,所以建议任何带有 left join 的sql,都写标准sql,即给于表一个别名,字段也要:别名.字段。

Page对象属性如下:

属性名类型默认值描述
recordsListemptyList查询数据列表
totalLong0查询列表总记录数
sizeLong10每页显示条数,默认 10
currentLong1当前页
ordersListemptyList排序字段信息,允许前端传入的时候,注意 SQL 注入问题,可以使用 SqlInjectionUtils.check(...) 检查文本
optimizeCountSqlbooleantrue自动优化 COUNT SQL 如果遇到 jSqlParser 无法解析情况,设置该参数为 false
optimizeJoinOfCountSqlbooleantrue自动优化 COUNT SQL 是否把 join 查询部分移除
searchCountbooleantrue是否进行 count 查询,如果指向查询到列表不要查询总记录数,设置该参数为 false
maxLimitLong单页分页条数限制
countIdStringxml 自定义 count 查询的 statementId
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Mybatis-Plus 是一个 Mybatis 的插件,提供了很多增强功能,其中包括分页查询。Mybatis-Plus分页查询使用起来非常简单,只需要引入相关依赖,然后在查询方法中使用 Page 对象即可。 具体步骤如下: 1. 引入 Mybatis-Plus分页插件依赖,例如: ``` <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.1</version> </dependency> ``` 2. 在查询方法中创建一个 Page 对象,并且将当前页和每页显示条数设置好,例如: ``` Page<User> page = new Page<>(1, 10); ``` 3. 调用 Mybatis-Plus 提供的分页查询方法,例如: ``` IPage<User> userPage = userMapper.selectPage(page, new QueryWrapper<User>().lambda().eq(User::getAge, 18)); ``` 其中,userMapper 是 Mybatis-Plus 自动生成的 Mapper 接口,selectPage 是 Mybatis-Plus 提供的分页查询方法,第一个参数是 Page 对象,第二个参数是查询条件。 4. 最后,可以通过 userPage 对象获取分页查询的结果,例如: ``` List<User> userList = userPage.getRecords(); long total = userPage.getTotal(); ``` 其中,getRecords 方法返回当前页的数据列表,getTotal 方法返回总记录数。 这就是 Mybatis-Plus分页查询的基本用法。需要注意的是,Mybatis-Plus 默认使用的是物理分页,也就是先查询出所有符合条件的记录,然后再根据分页参数返回对应的数据,这种方式虽然能够实现分页,但是对于数据量非常大的情况下,会影响查询性能。因此,建议在需要分页的情况下,使用逻辑分页,也就是在查询条件中加上分页相关的参数,例如 limit offset。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值