当前位置: 首页 > article >正文

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
     */
    @Bean
    public 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 {

    @Autowired
    private 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 {

    @Autowired
    private 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 项目中完成分页查询功能的实现,大大提升了开发效率和系统的性能。


http://www.kler.cn/a/461012.html

相关文章:

  • sniff2sipp: 把 pcap 处理成 sipp.xml
  • 今日复盘103周五(189)
  • 异步爬虫之aiohttp的使用
  • 《从入门到精通:蓝桥杯编程大赛知识点全攻略》(一)-递归实现指数型枚举、递归实现排列型枚举
  • 系统思考—信任
  • 每天五分钟机器学习:凸集
  • 在C++中,dynamic_cast是一种用于在类的继承体系中进行安全向下转型
  • 搭建ZooKeeper分布式集群
  • 2、单片机、CC2530、zigbee期末考试选择、填空题含答案
  • 如何确保Kafka集群的高可用?
  • Cursor小试1.生成一个网页的接口请求工具
  • Django 管理界面实现自动提交和动态字段选项
  • 鸿蒙HarmonyOS应用开发 探索 HarmonyOS Next-从开发到实战掌握 HarmonyOS Next 的分布式能力
  • C++中宏的使用方法
  • AI同传的崛起:人工同传还能坚持多久?
  • 股市学习 seekingalpha tradingview
  • OpenAI 的 o3 — AGI 还是闪亮的幻影?
  • 信息安全管理:网络安全
  • iPhone 14、iPhone SE 3,提前淘汰
  • 深度学习-稀疏卷积
  • SD-WAN与传统专线网络的区别分析
  • Codigger集成Copilot:智能编程助手
  • 【2024年-7月-27日-开源社区openEuler实践记录】剖析 elease - management:优化软件发布流程的开源方案
  • 七次课掌握 Photoshop:动作及其它
  • 开源的go语言统一配置中心 - nacos + nacos go sdk
  • uniapp:微信小程序文本长按无法出现复制菜单