十一、MybatisPlus-插件功能-分页插件(1)

163 阅读2分钟

本文是系列文章,目录:
一、MybatisPlus-基本使用
二、MybatisPlus-进阶使用-条件构造器
三、MybatisPlus-进阶使用-自定义sql
四、MybatisPlus-进阶使用-Service接口(1)-基本使用
五、MybatisPlus-进阶使用-Service接口(2)-自定义service
六、MybatisPlus-进阶使用-Service接口(3)- 批量新增
七、MybatisPlus-进阶使用-逻辑删除
八、MybatisPlus-进阶使用-枚举处理器
九、MybatisPlus-进阶使用-JSON类型处理器
十、MybatisPlus-进阶使用-配置文件加密
十一、MybatisPlus-插件功能-分页插件(1)
十二、MybatisPlus-插件功能-分页插件(2)-通用分页封装
十三、MybatisPlus-插件功能-乐观锁插件
十四、MybatisPlus-插件功能-sql性能分析
十五、MybatisPlus-自动填充字段
MybatisPlus-问题汇总

MyBatis-Plus 提供了一系列强大的插件来增强 MyBatis 的功能,这些插件通过 MybatisPlusInterceptor 来实现对 MyBatis 执行过程的拦截和增强,进一步拓展其功能。以下是这些插件的详细介绍和使用方法。

目前已有的插件有:

  • PaginationInnerInterceptor:自动分页
  • TenantLineInnerInterceptor:多租户
  • DynamicTableNameInnerInterceptor:动态表名
  • OptimisticLockerInnerInterceptor:乐观锁
  • IllegalSQLInnerInterceptor:sql 性能规范
  • BlockAttackInnerInterceptor:防止全表更新与删除

本文介绍分页插件。
MyBatis-Plus 的分页插件 PaginationInnerInterceptor 提供了强大的分页功能,支持多种数据库,使得分页查询变得简单高效。

在未引入分页插件的情况下,MybatisPlus是不支持分页功能的,IServiceBaseMapper中的分页方法都无法正常起效。 所以,我们必须配置分页插件。

配置分页插件

1.创建 MybatisConfig 配置类

image.png
MybatisConfig.java

package com.pino.demo.config;

import com.baomidou.mybatisplus.annotation.DbType;
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;

@Configuration
public class MybatisConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
       // 初始化核心插件
       MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
       // 添加分页插件
       interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
       // 如果有多数据源可以不配具体类型, 否则都建议配上具体的 DbType
       return interceptor;
    }
}

2.编写一个分页查询的测试

package com.pino.demo;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.pino.demo.domain.po.User;
import com.pino.demo.service.IUserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;

@SpringBootTest(args = "--mpw.key=71b8fcd90e5104d1")
public class PageTest {
    @Autowired
    private IUserService userService;
    @Test
    void testPageQuery() {
       // 1.分页查询,new Page()的两个参数分别是:页码、每页大小
       Page<User> p = userService.page(new Page<>(2, 2));
       // 2.总条数
       System.out.println("total = " + p.getTotal());
       // 3.总页数
       System.out.println("pages = " + p.getPages());
       // 4.数据
       List<User> records = p.getRecords();
       records.forEach(System.out::println);
    }
}

测试结果:

image.png

这里用到了分页参数,Page,即可以支持分页参数,也可以支持排序参数。常见的API如下:

int pageNo = 1, pageSize = 5;
// 分页参数
Page<User> page = Page.of(pageNo, pageSize);
// 排序参数, 通过OrderItem来指定
page.addOrder(new OrderItem("balance", false));

userService.page(page);