欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > MyBatis-Plus 中的分页插件配置

MyBatis-Plus 中的分页插件配置

2025/2/25 0:05:20 来源:https://blog.csdn.net/weixin_46146718/article/details/144830374  浏览:    关键词:MyBatis-Plus 中的分页插件配置

学习文章:MyBatis-Plus 中的分页插件配置

    • MyBatis-Plus 中的分页插件配置
      • 1. 简介
      • 2. 分页插件配置
        • 2.1 配置类
        • 2.2 代码解释
        • 2.3 作用
      • 3. 分页插件的工作原理
      • 4. 使用分页插件
        • 4.1 实体类 `User`
        • 4.2 Mapper 接口
        • 4.3 服务层调用分页查询
        • 4.4 控制器层处理分页请求
        • 4.5 测试分页效果
      • 5. 高级配置
        • 5.1 设置最大页数
        • 5.2 分页插件的性能优化
      • 6. 总结


MyBatis-Plus 中的分页插件配置

1. 简介

MyBatis-Plus(简称 MP)是一个基于 MyBatis 的增强工具,它简化了 MyBatis 的开发,提供了许多常用功能的增强,包括分页功能。分页查询是数据库中最常见的需求之一,尤其在处理大量数据时,分页查询能够有效减少内存消耗和提升查询性能。

在 MyBatis-Plus 中,分页功能通过分页插件 PaginationInterceptor 来实现。该插件会自动拦截分页查询请求,在执行 SQL 时自动为查询语句添加分页条件,并且可以自动获取总记录数(total)。

本文将详细讲解如何配置 MyBatis-Plus 的分页插件,并介绍相关的使用方法。

2. 分页插件配置

在 Spring Boot 项目中,我们通常需要对分页插件进行简单的配置,以便启用分页查询功能。以下是一个常见的分页插件配置类:

2.1 配置类
package com.example.demo.config;import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class MyBatisPlusConfig {/*** 配置 MyBatis-Plus 分页插件* * @return PaginationInterceptor*/@Beanpublic PaginationInterceptor paginationInterceptor() {return new PaginationInterceptor();}
}
2.2 代码解释
  • @Configuration 注解:表示这是一个 Spring 配置类,Spring 会扫描并加载该配置类。
  • @Bean 注解:用于将 PaginationInterceptor 实例注入 Spring 容器,使其成为一个 Spring 管理的 Bean。
  • PaginationInterceptor:是 MyBatis-Plus 提供的分页插件,它可以自动处理分页逻辑,包括计算总记录数、自动为 SQL 查询添加分页条件等。
2.3 作用
  • 拦截分页查询PaginationInterceptor 会自动拦截所有分页查询请求,在执行查询前,会向 SQL 语句中添加 LIMIT 子句(或者在支持的数据库中使用类似的分页语法)。
  • 自动处理总记录数:它会自动计算符合条件的记录总数并设置到 Page 对象的 total 字段中,返回给前端进行分页显示。

3. 分页插件的工作原理

分页插件的工作原理相对简单:

  1. 分页查询请求:用户请求分页查询时,传入一个 Page 对象作为参数,Page 对象封装了当前页码和每页的记录数。
  2. 拦截 SQL 语句PaginationInterceptor 会拦截执行的 SQL 语句,在 SQL 中自动加入 LIMIT 子句(或其他适合数据库的分页语法),实现数据库级的分页。
  3. 查询总记录数:插件会根据分页条件执行一次 COUNT 查询,计算出符合条件的总记录数。
  4. 返回分页数据:插件会返回分页数据和总记录数,设置到 Page 对象中,返回给调用方。

4. 使用分页插件

假设我们有一个 User 实体类,和对应的 Mapper 接口。以下是一个使用分页插件的典型例子。

4.1 实体类 User
public class User {private Long id;private String username;private String email;private Integer age;// Getter 和 Setter 省略
}
4.2 Mapper 接口
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Select;public interface UserMapper extends BaseMapper<User> {// 使用 MyBatis-Plus 的分页功能@Select("SELECT * FROM user WHERE age > #{age}")List<User> selectUsersByAge(Page<User> page, Integer age);
}
4.3 服务层调用分页查询
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class UserService {@Autowiredprivate UserMapper userMapper;public Page<User> getUsersByAge(Integer age, Integer pageNum, Integer pageSize) {Page<User> page = new Page<>(pageNum, pageSize);  // 设置页码和每页大小List<User> users = userMapper.selectUsersByAge(page, age);  // 执行分页查询page.setRecords(users);  // 设置查询结果return page;}
}
4.4 控制器层处理分页请求
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;@RestController
public class UserController {@Autowiredprivate UserService userService;@GetMapping("/users")public Page<User> getUsers(@RequestParam Integer age, @RequestParam Integer pageNum, @RequestParam Integer pageSize) {return userService.getUsersByAge(age, pageNum, pageSize);}
}
4.5 测试分页效果

假设你访问 /users?age=25&pageNum=1&pageSize=10,分页插件会自动计算符合条件的总记录数,并返回数据。

返回的 Page<User> 对象中,包含了:

  • records:当前页的数据记录。
  • total:符合条件的总记录数。

5. 高级配置

5.1 设置最大页数

为了避免用户请求过大的页码,可以通过配置 PaginationInterceptor 限制最大页数。

@Bean
public PaginationInterceptor paginationInterceptor() {PaginationInterceptor paginationInterceptor = new PaginationInterceptor();// 设置最大单页限制数量,默认 500 条,-1 不受限制paginationInterceptor.setLimit(500);return paginationInterceptor;
}
5.2 分页插件的性能优化
  • 分库分表支持:MyBatis-Plus 提供了对分库分表的支持,PaginationInterceptor 会根据表的分片规则自动生成相应的分页查询语句,支持高性能分布式查询。
  • SQL 改写:分页插件会通过拦截 SQL,自动对查询语句进行改写,确保分页查询的高效执行。

6. 总结

MyBatis-Plus 的分页插件 PaginationInterceptor 是一个非常强大且易于配置的功能,能够帮助开发者轻松实现高效的分页查询。通过合理配置分页插件,开发者可以减少重复的分页代码,提高开发效率,并且确保分页查询的性能。

使用 MyBatis-Plus 的分页插件,我们只需简单配置,即可在 Spring Boot 项目中完成分页查询功能的实现,大大提升了开发效率和系统的性能。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词